讓您全面了解并上手億速云產品
常見入門級使用教程
對外 API 開發文檔中心
您歷史提交的工單
您的每一條意見,我們都嚴謹處理
您的每一條建議,我們都認真對待
“握手”是建立一個HTTPS連接過程的專業術語。涉及SSL/TLS的大部分困難工作都在此步完成。
一個HTTPS連接涉及兩方:客戶端(發起連接的一方,通常是你的瀏覽器)和服務器。另一方就是“握手”的人。SSL握手的目的是實施一個安全連接所需的所有加密工作。這包括SSL證書使用的驗證以及生成一個密鑰。
由于達成這一目的的每一個步驟所用到的軟件都是不同的,握手的第一步就是讓客戶端和服務器共用彼此的性能,以發現他們共同支持的加密功能。瀏覽器是最常見的客戶端,而諸如Chrome、火狐、IE等不同瀏覽器的功能也互不相同。類似地,在服務器端,諸如Windows Server、Apache、NGINX等常見操作系統也有著不同的性能支持。
一旦客戶端和服務器在他們使用的具體加密方法上達成一致,服務器就會向客戶端發送它的SSL證書。客戶端會檢驗以確認證書是“可信的”,這是一個極其重要的步驟。為真正建立一個安全連接,你不能只是加密你的數據,還要確保數據被發送到正確的人或地點。SSL證書提供了這種保證。
SSL證書是由證書頒發機構(CA)創建并簽發的,這種機構是被批準頒發證書的公司。你可能知道其中一些比較著名的機構,如 Symantec和Comodo。CA遵守行業標準,確保你只能得到你真正擁有的網站或公司的證書。
在握手期間,客戶端將進行加密安全檢驗來確保服務器提供的證書是可信的。這包括檢驗數字簽名并確保證書來自于一個可信的CA。
客戶端也會得到服務器擁有與此證書相關的私鑰的證明。所有SSL證書都包含一對密鑰,密匙由一個公鑰和一個私鑰組成。公鑰用于加密數據,私鑰則用于解密。這稱為“不對稱”加密,因為兩個功能由不同的密鑰來執行。
就最常見的密鑰類型RSA來說,客戶端會以公鑰加密隨機數據,用該公鑰生成會話密鑰。只有當服務器有私鑰提供所有權證明的情況下,才能解密并使用該數據。如果使用另一類型的密鑰,這個過程就變了,但總是需要檢驗所有權證明的。
握手的最后一部分涉及創建“會話密鑰”,這實際上是用于安全通信的密鑰。會話密鑰是“對稱”的,也就是說相同的密鑰既用于加密也用于解密。這樣的密鑰能實現強加密性,其有效性大大超過不對稱密鑰,這使得它們適于在HTTPS連接中來回發送數據。
為結束握手,每一方都要使對方知道他們完成了所有必要的工作,然后雙方都進行檢驗以確保握手過程中沒有任何惡意篡改和破壞。整個握手發生在幾百毫秒時間內。它是HTTPS連接中必須發生的第一件事,甚至要早于網頁的加載。
一旦握手完成,已加密和驗證過的HTTPS連接就開始了,所有在你和服務器之間被發送和接收的數據都受到保護。每次你重新訪問一個網站的時候,握手都將重復發生。為了實現更高的效率和速度,很多服務器會執行一個“繼續”過程。
握手包含一系列步驟,完成三個主要任務,我們將其概括為:交換加密功能、驗證SSL證書和交換/生成會話密鑰。希望了解具體過程的讀者請看備注[1]。注意,在即將到來的TLS1.3中,握手設計發生了變化,因此這些步驟不適用于TLS1.3。
下圖闡釋了這些步驟,左側是客戶端,右側是服務器。[2]每一步都有箭頭標識出接收消息的一方。
第一個消息是“客戶端問候”,是發送給服務器的。這條消息展示出客戶端具備的性能,這樣服務器就可以選擇怎樣進行通信。
服務器以“服務器問候”消息作回應。這條消息,告知了客戶端它從列表中選擇的連接參數。如果客戶端和服務器不具備任何共同的性能,連接就將被終止。
在“證書”消息中,服務器發送它的SSL證書鏈(包括它的葉子證書和中間證書)到客戶端。與加密同樣重要的是,為向連接提供驗證,一個SSL證書要由一個能夠使客戶端驗證證書合法性的CA簽發。然后客戶端將執行檢驗以確保證書合法。[3]這包括檢驗證書的數字簽名、驗證證書鏈以及對任何可能存在問題(如證書過期、域名錯誤等)的證書數據的檢驗。客戶端也會確保服務器有證書私鑰的所有權。這是在密鑰交換/生成過程中完成的。
這是一個可選消息,只有某些要求服務器提供額外數據的密鑰交換方法才需要。
“服務器問候完成”消息告知客戶端它的所有消息發送完畢。
客戶端也對會話密鑰有幫助。這一步的細節取決于在初始“問候”消息中就已確定的密鑰交換方法。TLS使用兩種不同密鑰:一個公鑰/私鑰對(SSL證書的一部分)和一個握手期間生成的會話密鑰。會話密鑰是“對稱密鑰”。它是在HTTPS連接期間使用的密鑰,因為相比天然較慢的“不對稱”的公鑰/私鑰對,它明顯更快、更高效。公鑰/私鑰對只在會話密鑰的安全傳輸的這幾個步驟中使用。
“更換密碼規范”消息使另一方知道它生成了會話密鑰并要轉換到加密通信。
然后發送“完成”消息,說明握手已經完成。該消息是加密的,而且是被會話密鑰保護的第一個數據。該消息包含允許雙方確認握手未被篡改的數據。
現在到了服務器做相同事情的時候了,服務器發送它的“更換密碼規范”消息,表示它要轉換到加密通信。
服務器發送“完成”消息。
在這幾步完成后,SSL握手就完成了。雙方現在有了一個會話密鑰并開始以一個加密的和驗證過的連接進行通信。從這時起,“應用”數據(屬于實際服務的數據,也就是網站的HTML、Javascript等)的第一個字節可以被發送了。
備注:
[1]注意我們只是在講一個只涉及服務器驗證的典型的握手。在TLS中,可能會有互相驗證,客戶端也會提供證書。但很少使用。
[2]參考文獻:Section 7 & 7.4 of the TLS 1.2 RFC. Chapter 2 of Bulletproof SSL & TLS by Ivan Ristic
[3]注意,TLS的RFC規定證書驗證應在“服務器問候完成”消息之后進行。
Copyright ? Yisu Cloud Ltd. All Rights Reserved. 2018 版權所有
廣州億速云計算有限公司 粵ICP備17096448號-1 粵公網安備 44010402001142號 增值電信業務經營許可證編號:B1-20181529