摘要認證和基本認證相容,但更為安全。雖然還沒有德奧廣泛應用,但對實現安全事務來說,這些概念很重要。
1.永遠不會以明文方式在網路上傳送密碼。
2.可以防止惡意使用者捕獲並重放認證的握手過程。
3.可以有選擇地防止對報文內容的篡改。
4.防範其他幾種常見的攻擊方式。
對然不是最安全的,也不能滿足安全http事務的很多需求,但還是比一些協議好。
客戶端不傳送密碼而是傳送乙個指紋或密碼的摘要,這是密碼的不可逆擾碼。客戶端和伺服器都知道這個密碼。因此伺服器可以驗證所提供的摘要是否與密碼匹配。另一方在不知道密碼的情況下很難偽造摘要。
摘要是「對資訊主體的濃縮」,是一種單向函式,主要用於將無限的輸入轉換成有限的1濃縮輸出值。常見的有md5,sha(安全雜湊演算法)。
有時也將摘要函式成為加密的校驗和、單向雜湊函式或指紋函式。
即便不知道密碼,別有用心的人也可以截獲摘要,並一遍遍地重放給伺服器。為此,伺服器向客戶端傳送乙個成為「隨機數(nonce)」的特殊令牌,這個數經常變化,客戶端在計算摘要之前將隨機數附加到密碼上。
http摘要認證協議是一種公升級版的認證方式,所用首部與基本認證類似。他在傳統首部中新增了一些新的選項,還新增了新的可選首部authorization-info。
核心就是對公共資訊、保密資訊和有時限的隨機值這個組合的單向摘要。
三個元件計算摘要:
1.由單向雜湊函式h(d)和摘要kd(s,d)組成一隊函式,其中s表示密碼,d表示資料。
2.乙個包含了安全資訊的資料塊,包括密碼,成為a1.
3.乙個包含了請求報文中非保密屬性的資料塊,成為a2.
h和kd處理兩塊資料a1和a2,產生摘要。
摘要認證支援對各種摘要演算法的選擇。推薦使用md5和md5-sess(「sess」表示會話)。
都會用函式h來計算資料的md5,用摘要函式kd來計算以冒號連線的密碼和非保密資料的md5.
h
()=md5(
)kd(
,)=h(
concatence(:
))
被稱為a1的資料塊是密碼和受保護資訊的產物,它包括有使用者名稱、密碼、保護域和隨機數
等內容。
md5 a1 =::
md5-sess a1 =
md5(
::):
:
資料塊a2表示的是與報文自身有關的資訊,比如url,請求方法和報文實體的主體部分。a2有助於防止方法、資源或報文被篡改。a2會與h、kd和a1一起用於摘要的計算。
根據所選擇的保護質量(qop),為a2定義了兩種策略:
qop=「auth」時只包含http請求方法和url。
qop=「auth-int」時新增了報文實體的主體部分,以提供一定程度的報文完整性檢測。
qop未定義時kd(h(a1),:h(a2))
。qop等於auth或auth-int時計算方法為kd(h(a1),::::h())
。
客戶端響應對保護空間的www-authenticate質詢時,會啟動乙個此保護空間的認證會話(與受訪問伺服器的標準根結合在一起就定義了乙個「保護空間」)。
在客戶端收到另一條來自保護空間的任意一台伺服器的www-authenticate質詢之前,認證會話會一直持續。客戶端應該記住使用者名稱、密碼、隨機數、隨機數計數以及一些與認證會話有關的隱晦值,以便將來在此保護空間中構建請求的authorization首部時使用。
在普通的認證方式中,事務結束之前,每條請求都要有一次請求/質詢的迴圈。如果客戶端事先知道下乙個隨機數是什麼,就可以取消這個請求/質詢迴圈,這樣客戶端就可以在伺服器發出請求之前,生成正確的authorization首部了。如果客戶端能夠在伺服器要求它計算authorization首部之前將其計算出來,就可以預先將authorization首部傳送給伺服器,從而不用進行請求/質詢了。
三種預授權方式:
1.伺服器預先在authentication-info成功首部傳送下乙個隨機數。
2.伺服器允許在一小段時間內使用同乙個隨機數。
3.客戶端和伺服器使用同步、可**的隨機數生成演算法。
隨機數的內容不透明,而且與實現有關。但效能、安全和便捷性的優劣都取決於明智的選擇。
rfc2617建議採用這個隨機數公式:
base64
(time-stamp h
(time-stamp":"etag":"private_key)
)
time-stamp是伺服器產生的時間或其它不會重複的值,etag是與所請求實體有關的http etag首部,private_key是只有伺服器知道的資料。
rfc2617擴充套件了摘要認證機制,允許客戶端對伺服器進行認證。這是通過提供客戶端隨機值來實現的,伺服器會根據他對共享保密資訊的正確了解生成正確的響應摘要,然後通過authorization-info首部將此摘要返回給客戶端。
對稱認證是可選的,為了相容以前的版本。
可以在三種摘要首部中提供qop欄位:www-authenticate、authorization和authentication-info。
從而可以協商保護質量,是否保護報文完整性。
如果使用了完整性保護(qop=「auth-int」),h(實體的主體部分)就是對實體主體部分,而不是報文主體部分雜湊。
基本認證和摘要認證協議都包含了www-authenticate首部承載授權質詢、authorization首部承載授權響應。摘要認證還新增了authorization-info首部,這個首部是在成功認證之後傳送的,用於實現三步握手機制,並傳送下乙個隨機數。
伺服器可以對某個資源傳送多重質詢。比如,如果伺服器不了解客戶端的能力,就可以既提供基本認證質詢,又提供摘要認證質詢。客戶端面對多重質詢時,必須以它所支援的最強的質詢機制來應答。
在摘要認證中,如果某個指令或其值使用不當,或缺少某個必要指令,就應該使用響應400bad request。如果請求的摘要不匹配,就應該記錄一次失敗。某客戶端連續多次失敗可能說明有攻擊者正在猜測密碼。
域值,與被訪問伺服器的標準根url結合在一起,定義了保護空間。通過域,可以將伺服器上受保護資源劃分為一組保護空間,每個空間都有自己的認證機制和/或授權資料庫。
dialing可以通過改變uri語法,而不改變所描述的實際資源的方式來重寫uri。
共享的快取在收到帶有authorization首部的請求時,不能隨意使用,要根據cache-control指令確定處理方式。
進行端到端的加密,或對首部進行數字簽名(最好是兩者的結合)。
在當前上下文中,重放攻擊指的就是有人將某個事務中竊取的證書用於另乙個事務。
可以讓伺服器產生的隨機數包含(如前所述)根據客戶端ip位址、時間戳、資源etag和私有伺服器秘鑰算出的摘要。
一種可以完全避免重放攻擊的方法就是為每個事務都使用唯一的隨機數。
如何讓客戶端選用最強的認證機制。
是典型的密碼猜測攻擊方式。惡意使用者對某個事務進行竊聽,並對隨機數/響應對使用標準的密碼猜測程式。
如果**是惡意的或者容易被入侵的,那麼就會是客戶端置於中間人攻擊之下。
這種攻擊可以採用竊聽的方式也可以刪除提供的所有選項,用最薄弱的認證策略(比如基本認證機制)來取代現有的認證機制,對其進行修改。
防止這些攻擊唯一簡便的方式就是使用ssl。
使用摘要認證的客戶端會用伺服器提供的隨機數來生成響應。但如果中間有乙個被入侵或惡意的**在攔截流量(或者有個惡意的原始伺服器),就可以很容易地為客戶端計算提供隨機數。使用已知秘鈅來計算可以簡化響應的密碼分析過程。這被稱為選擇明文攻擊(chosen plaintext attack)。包括以下兩種變體:
1.預先計算的詞典攻擊:
2.批量暴力型攻擊:
密碼檔案被入侵,攻擊者馬上就能夠使用域中的所有檔案而不需要進行解碼。
可以採用以下方式保護:
1.就像密碼檔案中包含的是明文密碼一樣保護她;
2.確保網域名稱在所有域都是唯一的。從而將損失縮小到某個域內。
儘管摘要認證提供的解決方案比基本認證要強壯且安全得多,到它沒有為內容的安全提供任何保證–真正安全的事務只有通過ssl才能實現。
HTTP權威指南學習 第16章 國際化
http要能夠傳輸和處理多種語言和字母表編寫的國際性文件 兩個主要問題 字符集編碼 character set encoding 和語言標記 language tag http應用程式使用字符集編碼請求和顯示不同字母表中的文字,他們使用語言標記根據使用者所理解的語言來說明並限制內容。注意內容 講解h...
HTTP權威指南 1 2章)
web客戶端和服務端 可靠地資料傳輸協議 http 各個版本發展歷史 只支援get請求,不支援多 內容發熱mime型別,各種http首部,或者版本號 新增了版本號,各種http首部,一些額外的方法,以及對多 的處理,使得包含生動的web頁面和互動式 成為可能 增加了keep alive連線,虛擬主機...
HTTP權威指南(7,8章)
快取 優點 1.減少了冗餘的資料傳輸,節省了網路費用 2.緩解了網路瓶頸,不需要更多的頻寬就能更快的載入頁面 3.降低了隊員是伺服器的要求,伺服器可以更快的響應,避免過載的出現 4.降低了距離時延 http 1.1 cache control max age 秒 if modified since ...