目錄
什么是TLS協議?
TLS的基本流程?
兩種密鑰交換算法?
基于ECDHE密鑰交換算法的TLS握手過程?
基于RSA密鑰交換算法的TLS握手過程?
基于RSA的握手和基于ECDHE的握手有什么區別?
什么是前向保密?
什么是TLS協議?
? ? ? ??TLS是(Transport Layer security)的縮寫,中文叫傳輸層安全協議,是一種加密協議,用于保護網絡通信的安全。
TLS的基本流程?
? ? ? ? 1)客戶端向服務器索要并驗證服務器的公鑰
? ? ? ? 2)雙方協商生產會話密鑰
? ? ? ? 3)雙方采用會話密鑰進行通信
兩種密鑰交換算法?
? ? ? ? RSA和ECDHE,基于不同的密鑰交換算法的TLS握手過程有些區別。另外,TLS1.3及其以上版本已經不在支持RSA密鑰交換算法。
基于ECDHE密鑰交換算法的TLS握手過程?
????????1)第一次握手是客戶端發送Client Hello消息。(包含TLS版本,支持的密碼套件,以及一個隨機數)
????????2)第二次握手是服務端發送Server Hello消息。(服務器確認的TLS版本號,以及一個隨機數,并選擇了一個合適的密碼套件)。另外服務端為了證明自己的身份,還會發送一個證書給客戶端。除此之外,還會發送給客戶端一個Server Key Exchange(將選擇的橢圓曲線,以及基點G和服務端的橢圓曲線公鑰發送給客戶端),以及還有一個是Server Hello done告訴客戶端我發送完畢了。
????????3)第三次握手是客戶端發送Client Key Exchange消息,將客戶端的橢圓曲線公鑰發送給服務端。并生成一個隨機數作為自己的私鑰。發送change cipher spec消息,告訴服務端之后客戶端要用加密通信。接著客戶端會將之前發送的消息的摘要進行加密發送給服務端。
????????4)第四次握手是服務端向客戶端發送Change Cipher Spec,接著會將之前發送的信息進行加密發送給客戶端。如果雙方的加解密都沒有問題,則握手完成,之后就可以進行加密通信。
基于RSA密鑰交換算法的TLS握手過程?
????????1)第一次握手是客戶端向服務端發送Client Hello消息。(包含TLS版本,支持的密碼套件和客戶端生成的隨機數)
????????2)第二次握手是服務端向客戶端發送Server Hello消息(包含確認的TLS版本,選擇的密碼套件和服務端生成的隨機數)并發送證書(包含服務端的公鑰)
????????3)第三次握手:客戶端驗證證書的可信性后,客戶端會生成一個新的隨機數(pre-master),用服務器的RSA公鑰加密該隨機數,通過Client Key exchange消息發送給服務端。至此客戶端和服務端共享了三個隨機數,客戶端隨機數(Client Random),服務端隨機數(Server Random)以及剛剛生成的隨機數(pre-master)。將三個隨機數進行計算生成會話密鑰。生成會話密鑰后,和發送Change Cipher Spec,告訴服務端開始使用加密的方式發送消息。然后客戶端再發送一個加密消息供服務端解密驗證。
????????4)第四次握手:服務端收到客戶端的加密隨機數(pre-master)后,用私鑰進行解密。計算出會話密鑰,解密服務端的加密消息。之后對客戶端發送change cipher spec,以及再發送一個加密消息供客戶端解密驗證。
基于RSA的握手和基于ECDHE的握手有什么區別?
????????1)ECDHE安全。RSA密鑰協商算法不支持前向保密(服務端的公私鑰是不變的,一旦服務端私鑰泄漏,之前的通信內容全部會被破解),而ECDHE密鑰協商算法支持前向保密。
????????2)ECDHE搶跑。使用了RSA密鑰協商算法,TLS完成四次握手后才能進行應用數據傳輸。而ECDHE算法,客戶端可以不用等服務端的最后一次TLS握手,就可以提前發出加密的HTTP數據,節省了一個消息的往返時間。
????????3)在第二次握手中,ECDHE多了一個Server Key Exchange。
什么是前向保密?
????????前向保密是密碼學中通訊協議的安全屬性,指的是長期使用的主密鑰泄漏不會導致過去的會話密鑰泄漏。