http認證原理和https

2021-09-02 09:35:25 字數 3559 閱讀 4876

一.基礎介紹

在url前加https://字首表明是用ssl加密的。 你的電腦與伺服器之間收發的資訊傳輸將更加安全。

web伺服器啟用ssl需要獲得乙個伺服器證書並將該證書與要使用ssl的伺服器繫結。

http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。http的連線很簡單,是無狀態的。

https協議是由ssl+http協議構建的可進行加密傳輸、身份認證的網路協議,要比http協議安全。

二.http認證

1.http定義了兩個官方認證:基本認證和摘要認證,兩者遵循相同的流程:

a.客戶端發起get請求

b.伺服器響應401 unauthorized,www-authenticate指定認證演算法,realm指定安全域

c.客戶端重新發起請求,authorization指定使用者名稱和密碼資訊

d.伺服器認證成功,響應200,可選authentication-info

2.基本認證

將「使用者名稱:密碼」打包並採用base-64編碼。

缺點:密碼很容易被窺探,可以挾持編碼後的使用者名稱、密碼資訊,然後發給伺服器進行認證;可以與ssl配合,隱藏使用者名稱密碼。

3.摘要認證

不以明文傳送密碼,在上述第2步時伺服器響應返回隨機字串nonce,而客戶端傳送響應摘要 =md5(ha1:nonce:ha2),其中ha1=md5(username:realm:password),ha2=md5(method:digesturi)

在http 摘要認證中使用 md5 加密是為了達成"不可逆的",也就是說,當輸出已知的時候,確定原始的輸入應該是相當困難的。

如果密碼本身太過簡單,也許可以通過嘗試所有可能的輸入來找到對應的輸出(窮舉攻擊),甚至可以通過字典或者適當的查詢表加快查詢速度。

4.http摘要認證的安全性增強如下:

a.密碼並非直接在摘要中使用,而是 ha1 = md5(username:realm:password)。這就允許一些實現(如,jboss digestauth)僅儲存 ha1 而不是明文密碼。

b.在 rfc 2617 中引入了客戶端隨機數 nonce,這將使客戶端能夠防止選擇明文攻擊(否則,像rainbow table這類東西就會成為摘要認證構架的威脅)。

c.伺服器隨機數 nonce 允許包含時間戳。因此伺服器可以檢查客戶端提交的隨機數 nonce,以防止重放攻擊。

d.伺服器也可以維護乙個最近發出或使用過的伺服器隨機數nonce的列表以防止重用。

5.在安全性方面,摘要訪問認證有幾個缺點:

a.rfc 2617 中的許多安全選項都是可選的。如果伺服器沒有指定保護質量(qop),客戶端將以降低安全性的早期的 rfc 2069 的模式操作。

b.摘要訪問認證容易受到中間人攻擊。舉例而言,乙個中間人攻擊者可以告知客戶端使用基本訪問認證或早期的rfc 2069摘要訪問認證模式。

進一步而言,摘要訪問認證沒有提供任何機制幫助客戶端驗證伺服器的身份。

一些伺服器要求密碼以可逆加密演算法儲存。但是,僅儲存使用者名稱、realm、和密碼的摘要是可能的。

它阻止了使用強密碼雜湊函式(如bcrypt)儲存密碼(因為無論是密碼、或者使用者名稱、realm、密碼的摘要都要求是可恢復的)。

三.https

1.介紹https之前需要了解相關名詞

金鑰:改變密碼行為的數位化引數;

對稱金鑰加密:編碼、解碼採用同乙個金鑰,通訊雙方對話前一定要有乙個共享的保密金鑰;破解者需要遍歷每乙個可能金鑰;

公開金鑰加密:使用兩個非對稱金鑰,分別用於編碼和解碼,前者是公共的,後者只有本地主機儲存;rsa為mit發明的公開金鑰加密系統;

數字簽名:即加密的校驗和,可防止報文被篡改;

a.a將變長報文提取為定長摘要,對其應用簽名函式(使用使用者的私鑰作引數),將簽名附加在報文末尾;

b.b接收報文時對簽名進行檢查,使用公開金鑰進行反函式,若拆包後摘要與明文摘要不匹配,說明報文被篡改或沒有使用a的私鑰;

數字證書:包含物件名、過期時間、證書發布者、公開金鑰、數字簽名,大部分證書都使用x.509 v3格式;

通過https建立乙個安全web事務後,瀏覽器會主動獲取伺服器的數字證書,若沒有證書則安全連線失敗。

將http同一組基於證書的加密技術組合一起,ssl介於http和tcp之間,負責http報文的加密和解密;

若url為https,客戶端開啟一條到伺服器443埠的連線,以二進位制格式與伺服器握手交換ssl安全引數,並附上加密的http命令;

ssl協議可分為兩層:

1).ssl記錄協議(ssl record protocol):它建立在可靠的傳輸協議(如tcp)之上,為高層協議提供資料封裝、壓縮、加密等基本功能的支援。

2).ssl握手協議(ssl handshake protocol):它建立在ssl記錄協議之上,用於在實際的資料傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密金鑰等。

3.ssl協議的工作流程

a.伺服器認證階段

1).客戶端向伺服器傳送乙個開始資訊「hello」以便開始乙個新的會話連線;

2).伺服器根據客戶的資訊確定是否需要生成新的主金鑰,如需要則伺服器在響應客戶的「hello」資訊時將包含生成主金鑰所需的資訊;

3).客戶根據收到的伺服器響應資訊,產生乙個主金鑰,並用伺服器的公開金鑰加密後傳給伺服器;

4).伺服器恢復該主金鑰,並返回給客戶乙個用主金鑰認證的資訊,以此讓客戶認證伺服器。

b.使用者認證階段

經認證的伺服器傳送乙個提問給客戶,客戶則返回(數字)簽名後的提問和其公開金鑰,從而向伺服器提供認證。

4.握手過程

ssl協議既用到了公鑰加密技術又用到了對稱加密技術,對稱加密技術雖然比公鑰加密技術的速度快,可是公鑰加密技術提供了更好的身份認證技術。

1).客戶端的瀏覽器向伺服器傳送客戶端ssl 協議的版本號,加密演算法的種類,產生的隨機數。

2).伺服器向客戶端傳送ssl 協議的版本號,加密演算法的種類,隨機數以及其他相關資訊,同時伺服器還將向客戶端傳送自己的證書。

3).客戶利用伺服器傳過來的資訊驗證伺服器的合法性,證書是否過期,發行伺服器證書的ca 是否可靠,發行者證書的公鑰能否正確解開伺服器證書的「發行者的數字簽名」

4).客戶端隨機產生乙個用於後面通訊的「對稱密碼」,然後用伺服器的公鑰對其加密,傳給伺服器。

5).伺服器和客戶端用相同的主密碼,即對稱金鑰用於ssl 協議的安全資料通訊的加解密通訊.

5.https隧道

建立連線時客戶端採用伺服器的公開金鑰對傳送資料加密,**就無法讀取http首部,也就不知道將請求轉向何處;

https ssl隧道協議允許客戶端先告知**欲連線的伺服器和埠,即通過connect方法明文傳送端點資訊,**建立同伺服器的tcp連線,客戶端直接採用此隧道同伺服器通訊;

隧道:通過http連線傳送非http流量。

HTTP和HTTPS通訊原理

直接用一張圖完美的解釋 2.服務端必須要有一套數字證書,可以自己製作,也可以向組織申請。區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面,這套證書其實就是一對公鑰和私鑰。伺服器的開發人員向數字證書認證機構 ca 提出公開金鑰的申請,審核通過後,...

HTTP通訊原理和HTTPS通訊原理

本博主參加位元組跳動第一次面試的時候,發現自己對於網路協議這方面欠缺很嚴重,並且在資訊保安課程中學到了部分數字證書的概念,故特意整理部落格以加強自己對於部分協議體系的理解。http 協議 hypertext transfer protocol,超文字傳輸協議 是客戶端瀏覽器或其他程式與web伺服器之...

詳解HTTP和HTTPS加密原理

一 什麼是http協議?超文字傳輸協議 http,hypertext transfer protocol 是網際網路上應用最為廣泛的一種網路協議。所有的www檔案都必須遵守這個標準。位於tcp ip四層模型中的應用層。http協議通過客戶端請求 服務端響應的方式進行通訊。但是http有乙個致命的缺點...