HTTPS工做流程

轉載自:https://www.cnblogs.com/linianhui/p/security-https-workflow.htmlhtml

0. 簡單回顧

在前面兩篇博客中介紹了密碼相關的一些基本工具,包括(對稱密碼,公鑰密碼,密碼散列函數,混合密碼系統,消息認證碼碼,數字簽名,僞隨機數,數字證書)這幾個。其中它們之間也是互相依賴的,咱們來簡單的梳理一下它們的依賴關係。git

  1. 對稱密碼:無。
  2. 公鑰密碼:無。
  3. 密碼散列函數:無。
  4. 僞隨機數:能夠利用密碼散列函數來實現,也能夠不使用。
  5. 混合密碼系統:對稱密碼 + 公鑰密碼 + 密碼散列函數。
  6. 消息認證碼:密碼散列函數 + 對稱密碼。
  7. 數字簽名:密碼散列函數 + 公鑰密碼。
  8. 數字證書:公鑰密碼 + 數字簽名。

這篇要介紹的HTTPS,則把以上這些全都派上場了。github

1. HTTPS 簡史

在早期HTTP誕生的這幾年間,1990年~·1994年,HTTP做爲一個應用層協議,它是這樣工做的:windows

後來網景公司開發了SSL(Secure Sockets Layer)技術,而後它就變成了這樣的HTTP,也就是HTTPS了:函數

後來爆發了與IE的世紀大戰,網景敗北,SSL移交給了IETF(Internat Engineering Task Force)互聯網工程任務組,標準化以後變成了如今的TLS,如今通常會把它們兩個放在一塊兒稱爲SSL/TLS。本篇並不關注SSL/TLS具體是如何工做的,只是抽象的解釋下HTTPS的一個工做流程。工具

2. HTTPS 工做流程

  1. Client發起一個HTTPS(https:/demo.linianhui.dev)的請求,根據RFC2818的規定,Client知道須要鏈接Server的443(默認)端口。
  2. Server把事先配置好的公鑰證書(public key certificate)返回給客戶端。
  3. Client驗證公鑰證書:好比是否在有效期內,證書的用途是否是匹配Client請求的站點,是否是在CRL吊銷列表裏面,它的上一級證書是否有效,這是一個遞歸的過程,直到驗證到根證書(操做系統內置的Root證書或者Client內置的Root證書)。若是驗證經過則繼續,不經過則顯示警告信息。
  4. Client使用僞隨機數生成器生成加密所使用的會話密鑰,而後用證書的公鑰加密這個會話密鑰,發給Server。
  5. Server使用本身的私鑰(private key)解密這個消息,獲得會話密鑰。至此,Client和Server雙方都持有了相同的會話密鑰
  6. Server使用會話密鑰加密「明文內容A」,發送給Client。
  7. Client使用會話密鑰解密響應的密文,獲得「明文內容A」。
  8. Client再次發起HTTPS的請求,使用會話密鑰加密請求的「明文內容B」,而後Server使用會話密鑰解密密文,獲得「明文內容B」。

簡單總結下,HTTPS是使用了證書的一個混合密碼系統,其中證書的做用在於傳遞會話密鑰,以及驗證網站的真實性;而HTTPS真正的加密操做是由對稱密碼這個工具負責的(有興趣的能夠找找每一個步驟中都用到了密碼工具箱中的那些工具)。在windows系統中,能夠配置一個名爲 SSLKEYLOGFILE 的環境變量,Chrome和Firefox在訪問HTTPS站點的時候,會把第4步生成的會話密鑰以及其餘附屬信息,寫入到這個文件中:網站

好比下圖:ui

具體的格式能夠參考MDN的一個說明https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format加密

以上只是一個抽象的HTTPS的一個工做流程,實際上SSL/TLS所作的工做遠不止這這些,更詳細的解釋請參考這篇文章:http://www.infoq.com/cn/articles/HTTPS-Connection-Jeff-Moser操作系統

3. 參考

SSL/TLS:https://en.wikipedia.org/wiki/Transport_Layer_Security

IETF:https://en.wikipedia.org/wiki/Internet_Engineering_Task_Force

HTTPS:https://en.wikipedia.org/wiki/HTTPS

HTTPS 鏈接最初的若干毫秒:http://www.infoq.com/cn/articles/HTTPS-Connection-Jeff-Moser

HTTPS on Stack Overflow: The End of a Long Road:https://nickcraver.com/blog/2017/05/22/https-on-stack-overflow/

SSL/TLS部署最佳實踐:https://github.com/ssllabs/research/wiki/SSL-and-TLS-Deployment-Best-Practices

HTTP Over TLS:https://tools.ietf.org/html/rfc2818

SSLKEYLOGFILE:https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format

相關文章
相關標籤/搜索