HTTP 與 HTTPS 協議分析

2022-08-29 18:06:10 字數 3521 閱讀 5387

全球資訊網客戶程式與全球資訊網伺服器程式之間的互動遵守嚴格的協議,這就是超文字傳輸協議 http(hypertext transfer protocol)。http 是乙個應用層協議,它使用 tcp 連線進行可靠的傳送。

安全套接字層 ssl(secure socket layer) 和運輸層安全 tls(transport layer security)是現在廣泛使用的兩個安全協議,作用在端系統應用層的 http 和運輸層之間,在 tcp 之上建立起乙個安全通道,為通過 tcp 傳輸的應用層資料提供安全保障。

超文字傳輸安全協議 https(hyper text transfer protocol over secure socket layer)在 http 的基礎上加入 ssl 層,通過傳輸加密和身份認證保證了傳輸過程的安全性。

本次實驗使用 wireshark 報文分析軟體,分別通過分析 http 和 https 協議的互動過程和報文內容,研究二者的工作原理及異同之處。

http 協議使用了面向連線的 tcp 協議作為運輸層協議,保證了資料的可靠傳輸。具體來說,http 協議首先要和伺服器建立 tcp 連線,這需要使用三報文握手。當建立 tcp 連線的三報文握手的前兩部分完成後,全球資訊網客戶就把 http 請求報文,作為建立 tcp 連線的三報文握手中的第三個報文的資料,傳送給全球資訊網伺服器。伺服器收到 http 請求報文後,就把所請求的文件作為響應報文返回給客戶。

建立 tcp 連線

我們首先通過實驗驗證建立連線的過程。這裡我們選擇乙個使用 http 協議的**「c語言中文網」( )進行訪問,然後在 wireshark 軟體中過濾出涉及該** ip 位址的報文。

從圖中可以清楚地看到建立 tcp 連線的三個報文:客戶端發出的連線請求報文中 syn=1,伺服器發出的確認報文中 syn=1 且 ack=1,最後客戶端發出的確認報文中 ack=1。

分析 http 報文

tcp 連線建立成功後,客戶端就會傳送 http 請求報文,伺服器收到後也發回了響應報文,如下圖所示。

可以看到,請求報文中包含方法、url、版本等字段,而響應報文中包含狀態碼、實體主體等字段。

我們找到提交登入表單的報文,這條報文使用了 post 方法,將使用者登入所需的認證資訊傳送給伺服器。可以清楚地看到,報文中包含明文的 username 和 password 字段,顯然這是不安全的。

為了解決上述問題,使傳輸的過程更加安全,https 利用 ssl 層對會話進行加密,並提供身份認證和訊息認證等安全服務。具體來說,在建立 tcp 連線之後,客戶端與伺服器先進行握手協議,完成加密演算法的協商和會話金鑰的傳遞,然後進行安全資料傳輸。

從圖中可以大致總結出握手的基本流程:

客戶端 -> 伺服器:client hello

客戶端

客戶端

客戶端

客戶端 -> 伺服器:client key exchange, change cipher spec, encrypted handshake message

客戶端

下面我們詳細分析每一步中報文的具體內容。

1. client hello

client hello 用於首次連線伺服器時,或響應伺服器傳送的 hello request,或主動傳送,以便重新協商連線中的安全引數。報文中攜帶了 tls 協議版本號(version)、乙個隨機數(random)、客戶端支援的加密套件(cipher suites)、壓縮演算法(compression methods)等。

該型別的訊息用於響應 client hello 訊息。如果伺服器找到一組可以接受的演算法套件時,則回覆此訊息,否則響應握手失敗的警報。這裡伺服器返回協商的資訊,確定了使用哪種加密套件和壓縮方法等。此外,伺服器也生成了乙個隨機數。

該訊息緊跟在 server hello 訊息後,用於向客戶端下發證書。可以看到證書的型別是 x.509v3。

此訊息在 certificate 訊息後立即傳送,包含 diffie-hellman 演算法的相關引數,以及伺服器使用該秘鑰交換演算法所計算出來的公鑰。此外,伺服器為了證明此訊息是真實可靠的,需要使用自己證書的私鑰,並從 client hello 中提供的擴充套件 signature_algorithms 裡選擇合適的摘要和簽名演算法,對引數進行簽名。

傳遞完這些引數之後,伺服器傳送 server hello done,表示已經把支援秘鑰交換的訊息傳送完成,然後等待客戶端響應。

客戶端根據上一步伺服器傳來的公鑰,生成預主金鑰(pre-master key),然後通過 client key exchange 將其傳給伺服器。伺服器用自己的私鑰解出這個預主金鑰的資訊,得到第三個隨機數。到目前為止,客戶端和伺服器都擁有了三個隨機數。於是兩邊根據這三個隨機數以及 d-h 演算法的相關引數生成乙個會話金鑰(session key),後續就使用這個金鑰進行通訊。

change cipher spec 用於通知伺服器後續的通訊資料將在新協商的秘鑰規範保護下交換。

encrypted handshake message 是客戶端將前面的握手訊息生成摘要再用協商好的秘鑰加密得到的,這是客戶端發出的第一條加密訊息。服務端接收後會用秘鑰解密,能解出來說明前面協商出來的秘鑰是一致的。

同上,如果伺服器通過 d-h 演算法能夠解密摘要,那麼應該告知客戶端協商的會話金鑰是一致的。

至此,握手的過程就算結束了,這以後的資料都會通過建立好的加密通道進行傳輸。

https 與 http 協議 總結

https協議與http協議最大的不同在於安全性,https協議採用了ssl協議,保證通訊的安全性大致流程 ca 證書 電腦內有內建的ca公鑰,可以去解密服務端證書 雙方各自生成一樣的對稱金鑰,不存在金鑰在網路上傳輸的情況 服務端證書中包括 服務端公鑰,截止日期 頒發機構 簽名演算法 http 有四...

網路協議 HTTP與HTTPS

https的身份認證機制,如何證明我是我?我知道某帶密碼門鎖房間的密碼,如何證明我有這個密碼呢?有以下兩種方式 我把密碼告訴你,你用密碼開啟該房間的鎖。我知道該房間內有某一物品,我用密碼開啟房間的們,然後把物品拿出來給你看。方式 的結果是密碼洩露了,方式 是零知識證明,他指的是證明者能夠在不向驗證者...

HTTP協議 HTTPS協議

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