什么是網(wǎng)站app惠州seo管理
主要講加密算法RSA,ECDHE
TLS的握手涉及四次通信,根據(jù)不同的密鑰交換算法,TLS 握手流程也會(huì)不一樣的,現(xiàn)在常用的密鑰交換算法有兩種:RSA 算法和 ECDHE 算法
正常情況下,需要先TCP三次握手后進(jìn)行TLS四次握手
「TCP Fast Open + TLSv1.3 + 第二次以后的通信」情況下,TLS 和 TCP 的握手過程是可以同時(shí)進(jìn)行的;且會(huì)話復(fù)用可以做到0-RTT
RSA握手:
1.ClientHello
客戶端發(fā)送 ClientHello 消息,包含支持的 TLS 版本、加密套件列表、隨機(jī)數(shù)(后面用于生成「會(huì)話秘鑰」條件之一)
2.SeverHello
服務(wù)器響應(yīng) ServerHello 消息,選擇 TLS 版本和加密套件RSA,并發(fā)送自己的隨機(jī)數(shù)(也是后面用于生產(chǎn)「會(huì)話秘鑰」條件之一)。
- 服務(wù)器的數(shù)字證書Certificate(單獨(dú)發(fā)送的消息)
3.Client Key Exchange
證書驗(yàn)證:
客戶端在收到服務(wù)器的 ServerHello 和數(shù)字證書后,首先會(huì)通過操作系統(tǒng)或?yàn)g覽器中的 CA 公鑰驗(yàn)證服務(wù)器的證書的真實(shí)性。如果證書有效,客戶端可以信任該服務(wù)器。
公鑰提取:
客戶端從驗(yàn)證過的數(shù)字證書中提取服務(wù)器的公鑰。
生成 Pre-Master key(預(yù)主密鑰)并加密和發(fā)送:
客戶端生成一個(gè)新的隨機(jī)數(shù),稱為 pre-master key(后面用于生成「會(huì)話秘鑰」條件之一),并且用公鑰加密發(fā)送
服務(wù)器和客戶端有了這三個(gè)隨機(jī)數(shù)(Client Random、Server Random、pre-master key),接著就用雙方協(xié)商的加密算法,各自生成本次通信的「會(huì)話秘鑰」。
接下來,客戶端與服務(wù)器進(jìn)入加密通信,就完全是使用普通的 HTTP 協(xié)議,只不過用「會(huì)話秘鑰」加密內(nèi)容。
RSA缺陷:
隨機(jī)數(shù)的交換是使用服務(wù)端公鑰加密的,如果服務(wù)端私鑰泄露,就會(huì)被第三方截取所有的密文
RSA沒實(shí)現(xiàn)前向保密的原因:長期密鑰的使用、缺乏臨時(shí)密鑰機(jī)制
ECDHE握手:
1.Client Hello
客戶端發(fā)送 ClientHello 消息,包含支持的 TLS 版本、加密套件列表、隨機(jī)數(shù)(后面用于生成「會(huì)話秘鑰」條件之一
2.Server Hello
- 服務(wù)器響應(yīng) ServerHello 消息,選擇 TLS 版本和加密套件ECDHE,并發(fā)送自己的隨機(jī)數(shù)(也是后面用于生產(chǎn)「會(huì)話秘鑰」條件之一)
- 發(fā)送 證書Certificate 給客戶端
- 因?yàn)榉?wù)端選擇了 ECDHE 密鑰協(xié)商算法,所以會(huì)在發(fā)送完證書后,發(fā)送 Server Key Exchange 消息。
- 選擇橢圓曲線和基點(diǎn)G
- 生成隨機(jī)數(shù)作為服務(wù)端私鑰d1,保存在本地
- 生成公鑰Q1(Q1 = d1G),發(fā)送給客戶端,為了保證這個(gè)橢圓曲線的公鑰不被第三方篡改,服務(wù)端會(huì)用 RSA 簽名算法給服務(wù)端的橢圓曲線公鑰做個(gè)簽名
3.Client Key Exchange
- 根據(jù)證書驗(yàn)證服務(wù)端身份,生成一個(gè)隨機(jī)數(shù)作為客戶端橢圓曲線的私鑰d2,然后再根據(jù)服務(wù)端選的基點(diǎn)G,生成客戶端的橢圓曲線公鑰Q2,然后用 Client Key Exchange 消息發(fā)Q2給服務(wù)端。
- 至此,雙方都有對方的橢圓曲線公鑰、自己隨機(jī)生成的的橢圓曲線私鑰、橢圓曲線基點(diǎn) G。于是,雙方都就計(jì)算出點(diǎn)(x,y),其中 x 坐標(biāo)值雙方都是一樣的,前面說 ECDHE 算法時(shí)候,說 x 是會(huì)話密鑰,但實(shí)際應(yīng)用中,x 還不是最終的會(huì)話密鑰。
- 最終的會(huì)話密鑰,是用 客戶端隨機(jī)數(shù) + 服務(wù)端隨機(jī)數(shù) + ECDHE 算法算出的共享密鑰X 三個(gè)材料生成的。保證安全可靠
于是,就可以正常收發(fā)加密的 HTTP 請求和響應(yīng)了
ECDHE 密鑰交換可以將 TLS 握手減少到 1 RTT??蛻舳嗽谑盏椒?wù)器的 Server Hello 和證書后,可以直接計(jì)算共享密鑰并發(fā)送加密的握手消息,不再需要額外的往返時(shí)間。
前向保密的實(shí)現(xiàn)
- 臨時(shí)性:由于每次握手都生成新的臨時(shí)密鑰,即使長期私鑰被泄露,攻擊者也無法使用它解密過去的會(huì)話,因?yàn)槊總€(gè)會(huì)話的會(huì)話密鑰是獨(dú)立的。
- 密鑰的分離:會(huì)話密鑰的生成依賴于臨時(shí)密鑰和隨機(jī)數(shù),而不是長期密鑰。這樣,即使長期密鑰被攻擊者獲取,之前的會(huì)話密鑰仍然無法被恢復(fù)。