對 HTTP 和 HTTPS 協議的詳細解析

2021-10-03 13:44:01 字數 4234 閱讀 1529

http 協議即超文字傳輸協議,是用於從全球資訊網伺服器傳輸超文字到本地瀏覽器的傳送協議。

http 是基於 tcp/ip 通訊協議來傳遞資料的。http 協議工作於客戶端-服務端架構之上,瀏覽器作為 http 客戶端通過 url 向 http 服務端即 web 伺服器傳送所有請求。web 伺服器根據接收到的請求後,向客戶端傳送響應資訊。

https 是身披 ssl 外殼的 http,https 是一種通過計算機網路進行安全通訊的傳輸協議,經由 http 進行通訊,利用 ssl/tls 建立安全通道,加密資料報。https 使用的主要目的是提供對**伺服器的身份認證,同時保護交換資料的隱私與完整性。

如何理解 ssl?

https 的安全基礎是 ssl。ssl 協議位於 tcp/ip 協議與各種應用層協議之間,為資料通訊提供安全支援。ssl 協議可分為兩層:ssl 記錄協議,它建立在可靠的傳輸協議(如 tcp)之上,為高層協議提供資料封裝、壓縮、加密等基本功能的支援。ssl 握手協議,它建立在 ssl 記錄協議之上,用於在實際的資料傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密金鑰等。

ssl 提供了哪些服務?

1 認證使用者和伺服器,確保資料傳送到正確的客戶機和伺服器

2 加密資料以防止資料中途被竊取

3 維護資料的完整性,確保資料在傳輸過程中不被改變

http 特點:

無狀態:http 協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快

無連線:在 http/1.1 之前,限制每次連線只處理乙個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間

基於請求和響應:客戶端發起請求,服務端響應

靈活:http 允許傳輸任意型別的資料物件。正在傳輸的型別由 content-type 加以標記

通訊使用明文,請求和響應不會對通訊方進行確認,無法保護資料的完整性

https 特點:

內容加密:採用了混合加密技術,中間者無法直接檢視明文內容

驗證身份:通過證書認證客戶端訪問的是自己的伺服器

保護資料完整性:防止傳輸的內容被中間人冒充或者篡改

如何理解混合加密?

混合加密結合了非對稱加密和對稱加密技術。客戶端使用對稱加密生成金鑰對傳輸資料進行加密,然後使用非對稱加密的公鑰再對金鑰進行加密,所以網路上傳輸的資料是被金鑰加密的密文和用公鑰加密後的金鑰,即使被黑客擷取,由於沒有私鑰,無法獲取到加密明文的金鑰,便無法獲取到明文資料。

http協議採用了請求/響應模型。http 請求/響應的步驟如下:

客戶端連線到 web 伺服器:http 客戶端與 web 伺服器的 http 埠(預設為80)建立乙個 tcp 套接字連線

傳送 http 請求:通過 tcp 套接字,客戶端向 web 伺服器傳送乙個文字的請求報文,乙個請求報文由請求行、請求頭部、空行和請求資料4部分組成

伺服器接受請求並返回 http 響應:web 伺服器解析請求,定位請求資源。伺服器將資源複本寫到 tcp 套接字,由客戶端讀取。乙個響應由狀態行、響應頭部、空行和響應資料4部分組成

釋放連線 tcp 連線:若 connection 模式為 close,則伺服器主動關閉 tcp 連線,客戶端被動關閉連線,釋放 tcp 連線;若 connection 模式為 keepalive,則該連線會保持一段時間,在該時間內可以繼續接收請求

客戶端瀏覽器解析 html 內容

客戶端向伺服器傳送請求,然後連線到伺服器的443埠,並傳送客戶端 ssl 協議的版本號,加密演算法的種類,產生的隨機數,以及其他伺服器和客戶端之間通訊所需要的各種資訊

伺服器接收到資訊之後給予客戶端響應握手資訊,包括 ssl 協議的版本號,加密演算法的種類(客戶端傳送給伺服器加密演算法的子集),隨機數以及其他相關資訊

伺服器向客戶端傳送自己的證書。服務端必須要有一套數字證書,可以自己製作,也可以向組織申請。區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面,這套證書其實就是一對公鑰和私鑰。傳送證書,這個證書其實就是公鑰,只是包含了很多資訊,如證書的頒發機構,過期時間、服務端的公鑰,第三方證書認證機構(ca)的簽名,服務端的網域名稱資訊等內容

客戶端解析證書,該工作由客戶端的 tls 完成,如果沒有問題,將生成乙個被稱為預主秘鑰的隨機值

客戶端認證證書通過之後,接下來是通過客戶端的隨機值、伺服器的隨機值和預主秘鑰組裝會話秘鑰。然後通過證書的公鑰加密會話秘鑰

客戶端傳送加密資訊,這部分傳送的是用證書加密後的會話秘鑰,目的就是讓服務端使用秘鑰解密得到兩個隨機值和預主秘鑰

服務端解密得到兩個隨機值和預主秘鑰,然後組裝會話秘鑰,跟客戶端會話秘鑰相同

客戶端通過會話秘鑰加密一條訊息傳送給服務端,主要驗證服務端是否正常接受客戶端加密的訊息

服務端也會通過會話秘鑰加密一條訊息回傳給客戶端,如果客戶端能夠正常接受的話表明 ssl 層連線建立完成了

數字證書包括什麼內容?

包括了加密後伺服器的公鑰、權威機構的資訊、伺服器網域名稱,還有經過 ca 私鑰簽名之後的證書內容(經過先通過 hash 函式計算得到證書數字摘要,然後用權威機構私鑰加密數字摘要得到數字簽名),簽名計算方法以及證書對應的網域名稱

如何驗證證書安全性?

當客戶端收到證書之後,使用本地配置的權威機構的公鑰對證書進行解密得到服務端的公鑰和證書的數字簽名,數字簽名經過 ca 公鑰解密得到證書資訊摘要。

根據證書簽名的方法計算一下當前證書的資訊摘要,與收到的資訊摘要作對比,如果一樣,表示證書一定是伺服器下發的,沒有被中間人篡改過。因為中間人雖然有權威機構的公鑰,能夠解析證書內容並篡改,但是篡改完成之後中間人需要將證書重新加密,但是中間人沒有權威機構的私鑰,無法加密,強行加密只會導致客戶端無法解密,如果中間人強行亂修改證書,就會導致證書內容和證書簽名不匹配。

雙向的身份認證

客戶端和服務端在傳輸資料之前,首先會對雙方進行身份認證。具體過程如下:

客戶端發起 ssl 握手訊息給服務端要求連線

服務端將證書傳送給客戶端

客戶端檢查服務端證書,確認是否由自己信任的證書簽發機構簽發。 如果不是,將是否繼續通訊的決定權交給使用者選擇。如果檢查無誤或者使用者選擇繼續,則客戶端認可服務端的身份

服務端要求客戶端傳送證書,並檢查是否通過驗證。失敗則關閉連線,認證成功則從客戶端證書中獲得客戶端的公鑰。至此,伺服器客戶端雙方的身份認證結束,雙方確保身份都是真實可靠的

資料傳輸的機密性

客戶端和服務端在開始傳輸資料之前,會協商傳輸過程需要使用的加密演算法。客戶端傳送協商請求給服務端, 其中包含自己支援的非對成加密的金鑰交換演算法 ( 一般是 rsa),資料簽名摘要演算法 ( 一般是 sha 或者 md5) ,加密傳輸資料的對稱加密演算法 ( 一般是 des)以及加密金鑰的長度。服務端接收到訊息之後,選中安全性最高的演算法,並將選中的演算法傳送給客戶端,完成協商。客戶端生成隨機的字串,通過協商好的非對稱加密演算法,使用服務端的公鑰對該字串進行加密,傳送給服務端。 服務端接收到之後,使用自己的私鑰解密得到該字串。在隨後的資料傳輸當中,使用這個字串作為金鑰進行對稱加密。

防止重放攻擊

ssl 使用序列號來保護通訊方免受報文重放攻擊。這個序列號被加密後作為資料報的負載。在整個 ssl 握手中,都有乙個唯一的隨機數來標記 ssl 握手。 這樣防止了攻擊者嗅探整個登入過程,獲取到加密的登入資料之後,不對資料進行解密,而直接重傳登入資料報的攻擊手法。

https 在黑客攻擊、拒絕服務攻擊、伺服器劫持等方面幾乎起不到什麼作用,而且 ssl 證書的信用鏈體系並不安全,特別是在某些國家可以控制 ca 根證書的情況下,中間人攻擊一樣可行

https 協議握手階段比較費時,會使頁面的載入時間延長

https 連線快取不如 http 高效,流量成本高

ssl 證書通常需要繫結 ip,不能在同一 ip 上繫結多個網域名稱,ipv4 資源不可能支撐這個消耗

部署 https 後,因為 https 協議的工作要增加額外的計算資源消耗,例如 ssl 協議加密演算法和 ssl 互動次數將占用一定的計算資源和伺服器成本

ssl 證書需要購買申請,功能越強大的證書費用越高

參考:http和https協議,看一篇就夠了

http和https的區別(面試常考題)

HTTP協議 HTTPS協議

http協議是基於tcp協議的,當然是要先建立tcp連線了。目前使用的http協議大部分都是1.1.在1.1的協議裡面,預設是開啟了keep alive的,這樣建立的tcp連線,就可以在多次請求中復用。http的報文大概分成三大部分。第一部分是請求行,第二部分是請求的首部,第三部分才是請求的正文實體...

HTTP和HTTPS協議的區別

http 是超文字傳輸協議 是網際網路應用最廣泛的一種網路協議,是乙個客戶端和伺服器請求和應答的標準 tcp 用於www伺服器傳輸的超文字協議到本地瀏覽器的傳輸協議,不提供任何方式的資料加密。https 是安全超文字傳輸協議 它是乙個安全通道,是基於http夫人開發,用於客戶計算機和伺服器之間交換資...

http和https協議的區別

http 超文字傳輸協議,https 超文字傳輸安全協議 https 經由 http 進行通訊,但利用 ssl tls 來加密資料報。https 開發的主要目的,是提供對 伺服器的身份認證,保護交換資料的隱私與完整性。主要區別 1 http 明文傳輸,資料都是未加密的,安全性較差,https ssl...