HTTPS 詳解系列:
HTTPS 詳解一:附帶最精美詳盡的 HTTPS 原理圖
HTTPS 詳解二:SSL / TLS 工做原理和詳細握手過程git
在上篇文章HTTPS詳解一中,我已經爲你們介紹了 HTTPS 的詳細原理和通訊流程,但總感受少了點什麼,應該是少了對安全層的針對性介紹,那麼這篇文章就算是對HTTPS 詳解一的補充吧。還記得這張圖吧。算法
HTTPS 和 HTTP的區別
顯然,HTTPS 相比 HTTP最大的不一樣就是多了一層 SSL (Secure Sockets Layer 安全套接層)或 TLS (Transport Layer Security 安全傳輸層協議)。有了這個安全層,就確保了互聯網上通訊雙方的通訊安全,那麼這個安全層是怎麼工做的,SSL / TLS 握手過程又是怎樣的呢?本文將對這些問題一一解答。segmentfault
SSL 和 TLS 協議能夠爲通訊雙方提供識別和認證通道,從而保證通訊的機密性和數據完整性。TLS 協議是從Netscape SSL 3.0協議演變而來的,不過這兩種協議並不兼容,SSL 已經逐漸被 TLS 取代,因此下文就以 TLS 指代安全層。 TLS 握手是啓動 HTTPS 通訊的過程,相似於 TCP 創建鏈接時的三次握手。 在 TLS 握手的過程當中,通訊雙方交換消息以相互驗證,相互確認,並確立它們所要使用的加密算法以及會話密鑰 (用於對稱加密的密鑰)。能夠說,TLS 握手是 HTTPS 通訊的基礎部分。安全
咱們已經知道 TLS 握手的目的是創建安全鏈接,那麼通訊雙方在這個過程當中究竟幹了什麼呢?下面就是答案:服務器
下面來看 TLS 握手的詳細過程 (注:此圖與HTTPS詳解一中的 HTTPS 原理圖的流程大體相同,不一樣的是此圖把重點放在了TLS握手的相關概念上):app
SSL / TLS 握手詳細過程
驗證:客戶端對服務器發來的證書進行驗證,確保對方的合法身份,驗證過程能夠細化爲如下幾個步驟:dom
數字證書 (digital certificate):在非對稱加密通訊過程當中,服務器須要將公鑰發送給客戶端,在這一過程當中,公鑰極可能會被第三方攔截並替換,而後這個第三方就能夠冒充服務器與客戶端進行通訊,這就是傳說中的「中間人攻擊」(man in the middle attack)。解決此問題的方法是經過受信任的第三方交換公鑰,具體作法就是服務器不直接向客戶端發送公鑰,而是要求受信任的第三方,也就是證書認證機構 (Certificate Authority, 簡稱 CA)將公鑰合併到數字證書中,而後服務器會把公鑰連同證書一塊兒發送給客戶端,私鑰則由服務器本身保存以確保安全。數字證書通常包含如下內容:網站
... ...ui
數字簽名 (digital signature):這個概念很好理解,其實跟人的手寫簽名相似,是爲了確保數據發送者的合法身份,也能夠確保數據內容未遭到篡改,保證數據完整性。與手寫簽名不一樣的是,數字簽名會隨着文本數據的變化而變化。具體到數字證書的應用場景,數字簽名的生成和驗證流程以下:加密
證書鏈
證書鏈從根證書開始,而且證書鏈中的每一級證書所標識的實體都要爲其下一級證書籤名,而根證書自身則由證書頒發機構簽名。客戶端在驗證證書鏈時,必須對鏈中全部證書的數字簽名進行驗證,直到達到根證書爲止。
4.密碼規範和密碼組合 (CipherSpecs 和 CipherSuites):通訊雙方在安全鏈接中所使用的算法必須符合密碼安全協議的規定,CipherSpecs 和 CipherSuites 正好定義了合法的密碼算法組合。CipherSpecs 用於認證加密算法和信息摘要算法的組合,通訊雙方必須贊成這個密碼規範才能進行通訊。而 CipherSuites 則定義了 SSL / TLS 安全鏈接中所使用的加密算法的組合,該組合包含三種不一樣的算法:
本文對 SSL / TLS 握手過程進行了詳細的解析,也對握手過程當中的幾個重要概念進行了補充說明。想繼續深刻了解的小夥伴能夠去參考一下 CloudFlare 和 IBM 的官網,這兩個網站也是本文內容的主要來源。多逛逛英文網站,不只能夠漲姿式,獲取權威信息,還能順帶提高一波英語水平,一箭雙鵰,豈不美哉,但願小夥伴們也能儘快養成這樣的好習慣。HTTPS 詳解部分到此結束,我們下篇文章再見。