基於HTTP 協議認證介紹與實現

2021-09-08 22:53:05 字數 3418 閱讀 9952

一直對http 的頭認證有興趣,就是路由器的那種彈出對話方塊輸入賬號密碼怎麼實現一直不明白,最近,翻了一下http 協議,發現這是乙個rfc 2617的實現,所以寫篇文章介紹一下吧. 

這是乙個用於web瀏覽器或其他客戶端在請求時提供使用者名稱和密碼的登入認證,要實現這個認證很簡單:

我們先來看下協議裡面怎麼定義這個認證的. 1. 編碼: 將使用者名稱 追加乙個 冒號(':')接上密碼,把得出的結果字串在用base64演算法編碼.

請求頭: authorization: 認證型別 編碼字串

來看一下客戶端如何發起請求例如,有乙個使用者名為:tom, 密碼為:123456 怎麼認證呢?

步驟如下 1. 編碼

base64('tom:123456') == dg9tojeymzq1ng==;

把編碼結果放到請求頭當中
authorization: basic dg9tojeymzq1ng==

請求樣例客戶端

服務端應答

如果沒有認證資訊

驗證失敗的時候,響應頭加上www-authenticate: basic realm="請求域".

這種http 基本實現,幾乎目前所有瀏覽器都支援.不過,大家可以發現,直接把使用者名稱和密碼只是進行一次base64 編碼實際上是很不安全的,因為對base64進行反編碼十分容易,所以這種驗證雖然簡便,但是很少會在公開訪問的網際網路使用,一般多用在小的私有系統,例如,你們家裡頭的路由器,多用這種認證方式.

這個認證可以看做是基本認證的增強版本,使用隨機數+密碼進行md5,防止通過直接的分析密碼md5防止破解. 摘要訪問認證最初由 rfc 2069 (http的乙個擴充套件:摘要訪問認證)中被定義加密步驟:

後來發現,就算這樣還是不安全(md5 可以用彩虹表進行攻擊),所以在rfc 2617入了一系列安全增強的選項;「保護質量」(qop)、隨機數計數器由客戶端增加、以及客戶生成的隨機數。這些增強為了防止如選擇明文攻擊的密碼分析。

如果 qop 值為「auth」或未指定,那麼 ha2 為

如果 qop 值為「auth-int」,那麼 ha2 為

如果 qop 值為「auth」或「auth-int」,那麼如下計算 response:

如果 qop 未指定,那麼如下計算 response:

好了,知道加密步驟,下面我們用文本來描述一下;

最後,我們的response 由三步計算所得. 1. 對使用者名稱、認證域(realm)以及密碼的合併值計算 md5 雜湊值,結果稱為 ha1。

ha1 = md5( "tom:hi!:123456" ) = d8ae91c6c50fabdac442ef8d6a68ae8c

對http方法以及uri的摘要的合併值計算 md5 雜湊值,例如,"get" 和 "/index.html",結果稱為 ha2。

ha2 = md5( "get:/" ) = 71998c64aea37ae77020c49c00f73fa8

最後生成的響應碼

response = md5("d8ae91c6c50fabdac442ef8d6a68ae8c:l4qfzasyty**ac2b1lvy2llppj9r8jd3:00000001:c2dc5b32ad69187a 

:auth:71998c64aea37ae77020c49c00f73fa8") = 2f22e6d56dabb168702b8bb2d4e72453;

rfc2617 的安全增強的主要方式:

發起請求的時候,伺服器會生成乙個密碼隨機數(nonce)(而這個隨機數只有每次"401"相應後才會更新),為了防止攻擊者可以簡單的使用同樣的認證資訊發起老的請求,於是,在後續的請求中就有乙個隨機數計數器(cnonce),而且每次請求必須必前一次使用的打.這樣,伺服器每次生成新的隨機數都會記錄下來,計數器增加.在response 碼中我們可以看出計數器的值會導致不同的值,這樣就可以拒絕掉任何錯誤的請求.

請求樣例(服務端 qop 設定為"auth")

客戶端 無認證

伺服器響應(qop 為 'auth')

客戶端請求(使用者名稱: "tom", 密碼 "123456")

服務端應答

注意qop 設定的時候慎用:auth-int,因為一些常用瀏覽器和服務端並沒有實現這個協議.

HTTP協議基本認證

閱讀目錄 什麼是http基本認證 http基本認證的過程 http基本認證的優點 每次都要進行認證 http基本認證和https一起使用就很安全 http oauth認證 其他認證 客戶端的使用 桌面應用程式也通過http協議跟web伺服器互動,桌面應用程式一般不會使用cookie,而是把 使用者名...

http協議介紹

http協議是建立在tcp ip協議基礎上 http協議全稱 超文字傳輸協議 http協議1.0 1.1版本 目前通用的是1.1版本 http1.0 稱為短連線 http1.1 稱為長連線.所謂長,和短指的是 持續時間的 長連線 1.1 30s 短連線是傳送完資料就斷掉.http的請求部分 基本結構...

HTTP協議介紹

http概述 超文字傳輸協議基於tcp ip通訊協議來傳遞資料 如html檔案,結果 是乙個屬於應用層的物件導向的協議,由於簡捷,快速的方式適用於分布式超 資訊系統 工作於客戶端 伺服器架構 c s架構 瀏覽器作為客戶端通過url向http服務端即web伺服器傳送所有請求 http主要特點 簡單快速...