HTTP通訊原理和HTTPS通訊原理

2021-09-05 03:55:12 字數 4458 閱讀 9434

本博主參加位元組跳動第一次面試的時候,發現自己對於網路協議這方面欠缺很嚴重,並且在資訊保安課程中學到了部分數字證書的概念,故特意整理部落格以加強自己對於部分協議體系的理解。

http 協議(hypertext transfer protocol,超文字傳輸協議):是客戶端瀏覽器或其他程式與web伺服器之間的應用層通訊協議 。https(全稱:hypertext transfer protocol over secure socket layer),可以理解為http+ssl/tls, 即 http 下加入 ssl 層,https 的安全基礎是 ssl,因此加密的詳細內容就需要 ssl,用於安全的 http 資料傳輸。

https和http的區別:

a. https協議需要到ca申請證書,一般免費證書很少,需要交費。

b. http是超文字傳輸協議,資訊是明文傳輸;https 則是具有安全性的ssl加密傳輸協議。

c. http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。

d. http的連線很簡單,是無狀態的;https協議是由ssl+http協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。

http通訊機制是在一次完整的http通訊過程中,web瀏覽器與web伺服器之間將完成下列7個步驟:

1、建立tcp連線(回頭記錄下tcp的三次握手原理)

在http工作開始之前,web瀏覽器首先要通過網路與web伺服器建立連線,該連線是通過tcp來完成的,該協議與ip協議共同構建internet,即著名的tcp/ip協議族,因此internet又被稱作是tcp/ip網路。http是比tcp更高層次的應用層協議,根據規則,只有低層協議建立之後才能進行更深層協議的連線,因此,首先要建立tcp連線,一般tcp連線的埠號是80。

2、web瀏覽器向web伺服器傳送請求命令

一旦建立了tcp連線,web瀏覽器就會向web伺服器傳送請求命令

例如:get/sample/hello.jsp http/1.1。

3、 web瀏覽器傳送請求頭資訊

瀏覽器傳送其請求命令之後,還要以頭資訊的形式向web伺服器傳送一些別的資訊,之後瀏覽器傳送了一空白行來通知伺服器,它已經結束了該頭資訊的傳送。

4、web伺服器應答

客戶機向伺服器發出請求後,伺服器會客戶機回送應答,

應答的第一部分是協議的版本號和應答狀態碼。

5、web伺服器傳送應答頭資訊

正如客戶端會隨同請求傳送關於自身的資訊一樣,伺服器也會隨同應答向使用者傳送關於它自己的資料及被請求的文件。

6、web伺服器向瀏覽器傳送資料

web伺服器向瀏覽器傳送頭資訊後,它會傳送乙個空白行來表示頭資訊的傳送到此為結束,接著,它就以content-type應答頭資訊所描述的格式傳送使用者所請求的實際資料。

7、web伺服器關閉tcp連線

一般情況下,一旦web伺服器向瀏覽器傳送了請求資料,它就要關閉tcp連線,然後如果瀏覽器或者伺服器在其頭資訊加入了這行**

connection:keep-alive

tcp連線在傳送後將仍然保持開啟狀態,於是,瀏覽器可以繼續通過相同的連線傳送請求。保持連線節省了為每個請求建立新連線所需的時間,還節約了網路頻寬。

https是http over ssl/tls,http是應用層協議,tcp是傳輸層協議,在應用層和傳輸層之間,增加了乙個安全套接層ssl/tls:

如上圖所示 https 相比 http 多了一層 ssl/tls,ssl/tls層負責客戶端和伺服器之間的加解密演算法協商、金鑰交換、通訊連線的建立。

https在傳輸資料之前需要客戶端(瀏覽器)與服務端(**)之間進行一次握手,在握手過程中將確立雙方加密傳輸資料的密碼資訊。tls/ssl協議不僅僅是一套加密傳輸的協議,更是一件經過藝術家精心設計的藝術品,tls/ssl中使用了非對稱加密,對稱加密以及hash演算法。握手過程如下:

• 支援的最高tsl協議版本version,從低到高依次 sslv2 sslv3 tlsv1 tlsv1.1 tlsv1.2,當前基本不再使用低於 tlsv1 的版本;

• 客戶端支援的加密套件 cipher suites 列表, 每個加密套件對應前面 tls 原理中的四個功能的組合:認證演算法 au (身份驗證)、金鑰交換演算法 keyexchange(金鑰協商)、對稱加密演算法 enc (資訊加密)和資訊摘要 mac(完整性校驗);

• 支援的壓縮演算法 compression methods 列表,用於後續的資訊壓縮傳輸;

• 隨機數 random_c,用於後續的金鑰的生成;

• 擴充套件字段 extensions,支援協議與演算法的相關引數以及其它輔助資訊等,常見的 sni 就屬於擴充套件字段,後續單獨討論該欄位作用。

• server_hello, 服務端返回協商的資訊結果,包括選擇使用的協議版本 version,選擇的加密套件 cipher suite,選擇的壓縮演算法 compression method、隨機數 random_s 等,其中隨機數用於後續的金鑰協商;

• server_certificates, 伺服器端配置對應的證書鏈,用於身份驗證與金鑰交換;

• server_hello_done,通知客戶端 server_hello 資訊傳送結束;

客戶端驗證證書的合法性,如果驗證通過才會進行後續通訊,否則根據錯誤情況不同做出提示和操作,合法性驗證包括如下:

• [證書鏈]的可信性 trusted certificate path,方法如前文所述;

• 有效期 expiry date,證書是否在有效時間範圍;

• 網域名稱 domain,核查證書網域名稱是否與當前的訪問網域名稱匹配,匹配規則後續分析;

(a) client_key_exchange,合法性驗證通過之後,客戶端計算產生隨機數字 pre-master,並用證書公鑰加密,傳送給伺服器;

(b) 此時客戶端已經獲取全部的計算協商金鑰需要的資訊:兩個明文隨機數 random_c 和 random_s 與自己計算產生的 pre-master,計算得到協商金鑰;

enc_key=fuc(random_c, random_s, pre-master)

(c) change_cipher_spec,客戶端通知伺服器後續的通訊都採用協商的通訊金鑰和加密演算法進行加密通訊;

(d) encrypted_handshake_message,結合之前所有通訊引數的 hash 值與其它相關資訊生成一段資料,採用協商金鑰 session secret 與演算法進行加密,然後傳送給伺服器用於資料與握手驗證;

(a) 伺服器用私鑰解密加密的pre-master 資料,基於之前交換的兩個明文隨機數 random_c 和 random_s,計算得到協商金鑰:enc_key=fuc(random_c, random_s, pre-master);

(b) 計算之前所有接收資訊的 hash 值,然後解密客戶端傳送的 encrypted_handshake_message,驗證資料和金鑰正確性;

(c) change_cipher_spec, 驗證通過之後,伺服器同樣傳送 change_cipher_spec 以告知客戶端後續的通訊都採用協商的金鑰與演算法進行加密通訊;

(d) encrypted_handshake_message, 伺服器也結合所有當前的通訊引數資訊生成一段資料並採用協商金鑰enc_key與演算法加密併發送到客戶端;

客戶端計算所有接收資訊的 hash 值,並採用協商金鑰解密 encrypted_handshake_message,驗證伺服器傳送的資料和金鑰,驗證通過則握手完成;

開始使用協商金鑰與演算法進行加密通訊。時序圖如下:

在(3)證書校驗中,客戶端會對服務端傳送過來的證書做校驗,下面我們具體看下該過程做了哪些工作

1、驗證頒發者、有效期

2、驗證是否在信任列表中

2、驗證合法性

驗證證書時,客戶端讀取證書中的相關的明文資訊,採用相同的雜湊函式計算得到資訊摘要,然後,利用對應ca的公鑰(從本地取出)解密簽名資料,對比證書的資訊摘要,如果一致,則可以確認證書的合法性,即公鑰合法;

申請者公鑰、申請者的組織資訊和個人資訊、簽發機構 ca的資訊、有效時間、證書序列號等資訊的明文,同時包含乙個簽名;

簽名的產生:使用雜湊函式計算公開的明文資訊的資訊摘要,然後,採用 ca的私鑰對資訊摘要進行加密,密文即簽名。

1、client使用server傳送的公鑰加密資料,將加密資料傳送給server,server使用私鑰進行解密,是為非對稱加密

2、當client、server均掌握了協商金鑰enc_key後,雙方均用該金鑰進行加密、解密,是為對稱加密

關於理解對稱金鑰和非對稱金鑰的解釋,我就直接把大牛的部落格轉過來了。

HTTP和HTTPS通訊原理

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

http認證原理和https

一.基礎介紹 在url前加https 字首表明是用ssl加密的。你的電腦與伺服器之間收發的資訊傳輸將更加安全。web伺服器啟用ssl需要獲得乙個伺服器證書並將該證書與要使用ssl的伺服器繫結。http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。http的連線很簡...

http協議 04通訊原理

常見編碼規範 ascii碼 乙個位元組的儲存位 gbk漢字內碼擴充套件方式,倆個位元組的儲存位 iso 8859 1 除了ascii收納了其他的小語種 unicode 32個二進位制字符集表示 url是採用ascii字符集進行編碼的,所以如果url中含有非ascii字符集中的字 符,要對其進行編碼。...