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