關(guān)于HTTPS的TSL握手
HTTP一般基于TCP協(xié)議,而HTTPS就是在這之間加了SSL/TLS協(xié)議,那么在TCP三次握手建立TCP連接后,就需要TLS握手建立SSL/TLS連接。
TLS握手-流程
基于RSA算法
(1)首先,客戶端向服務(wù)器發(fā)起加密通信請(qǐng)求-ClientHello請(qǐng)求,該請(qǐng)求包括
① 生成隨機(jī)數(shù)(用于后續(xù)會(huì)話密鑰);
② 客戶端支持的密碼套件列表,如RSA加密算法。
③ 客戶端支持的TLS協(xié)議版本;
(2)服務(wù)器收到后,作出響應(yīng)-ServerHello,響應(yīng)包括
① 生成隨機(jī)數(shù)(用于后續(xù)會(huì)話密鑰);
② 確認(rèn)密碼套件列表;
③ 確認(rèn)TLS協(xié)議版本;
同時(shí)發(fā)送Certificate信息,攜帶服務(wù)器的數(shù)字證書(shū)。
(3)客戶端收到響應(yīng)后,先通過(guò)瀏覽器或OS中的CA公鑰確認(rèn)數(shù)字證書(shū)真實(shí)合法,再取出數(shù)字證書(shū)中服務(wù)器的公鑰,使用其加密報(bào)文,發(fā)送往服務(wù)器:
① 一個(gè)隨機(jī)數(shù);
② 傳遞后續(xù)通信都以【會(huì)話密鑰】加密通信的信息;
③ 客戶端握手結(jié)束通知;
④ 把之前所有發(fā)送數(shù)據(jù)做個(gè)摘要,并用【會(huì)話密鑰】加密,以保證可用和信息未被篡改過(guò)。
綜上的三個(gè)隨機(jī)數(shù),通過(guò)前面雙方協(xié)商的加密算法,客戶端生成本次通信的【會(huì)話密鑰】
(4)服務(wù)器收到后,也會(huì)計(jì)算出本次通信的【會(huì)話密鑰】,然后向客戶端發(fā)送信息:
① 傳遞后續(xù)通信都以【會(huì)話密鑰】加密通信的信息;
② 服務(wù)器握手結(jié)束通知
③ 把之前所有發(fā)送數(shù)據(jù)做個(gè)摘要,并用【會(huì)話密鑰】加密,以保證可用和信息未被篡改過(guò)。
到這里TLS握手結(jié)束!
不,內(nèi)容還沒(méi)。
RSA | 比較傳統(tǒng)的密鑰交換算法 | 不具前向安全的性質(zhì) | 目前使用較少 |
ECDHE | 前向安全 | 目前廣泛使用 |
Extra Summary
RSA 和 ECDHE 算法區(qū)別
(1)ECDHE支持前向保密
(2)使用ECDHE可不需等最后一次TLS握手,就可以提前發(fā)送加密的HTTP數(shù)據(jù),節(jié)省一個(gè)消息時(shí)間
(3)ECDHE在第2次握手,會(huì)出現(xiàn)服務(wù)器發(fā)出Server Key Exchange信息
以上RSA都達(dá)不到該效果。
Extra Question
第三次握手生成的【會(huì)話密鑰】是對(duì)稱的還是非對(duì)稱的?
考慮非對(duì)稱加密計(jì)算耗時(shí)量大,在HTTPS后續(xù)通信中使用的會(huì)話密鑰是對(duì)稱加密的。
前向保密是啥?
要求一個(gè)密鑰僅可訪問(wèn)它所保護(hù)的數(shù)據(jù);用來(lái)產(chǎn)生密鑰的元素一次一換,不能再產(chǎn)生其他密鑰;一個(gè)密鑰被破解,并不影響其他密鑰的安全性。
RSA為什么沒(méi)有前向保密性?
因?yàn)镽SA每次對(duì)稱加密傳遞信息,都是基于公鑰加密,私鑰解密的,若干服務(wù)器私鑰被截取了,那么通信數(shù)據(jù)將輕而易舉地被解密。
ECDHE怎么做到前向保密?
關(guān)鍵在于客戶端服務(wù)端都生成一對(duì)公私鑰,且密鑰是實(shí)時(shí)生成的??蛻舳朔?wù)器均為生成隨機(jī)數(shù)作為私鑰,據(jù)特殊公式算出各自的公鑰,然后雙方據(jù)持有的數(shù)據(jù)算出一個(gè)一樣隨機(jī)數(shù)用于后續(xù)對(duì)稱加密的密鑰。
到此這篇關(guān)于關(guān)于HTTPS的TSL握手的文章就介紹到這了,更多相關(guān)HTTPS的TSL握手內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
簡(jiǎn)單介紹HTTP請(qǐng)求方式中8種請(qǐng)求方法
這篇文章主要介紹了HTTP請(qǐng)求方式中8種請(qǐng)求方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-09-09關(guān)于程序員生活的一份調(diào)查,看看你屬于哪一個(gè)群體吧
這篇文章主要介紹了關(guān)于程序員生活的一份調(diào)查,看看你屬于哪一個(gè)群體吧,需要的朋友可以參考下2014-09-09git版本庫(kù)創(chuàng)建拓展添加文件到版本庫(kù)教程
這篇文章主要為大家介紹了git版本庫(kù)創(chuàng)建拓展添加文件到版本庫(kù)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04Github創(chuàng)建個(gè)人訪問(wèn)Tokens令牌
這篇文章介紹了Github創(chuàng)建個(gè)人訪問(wèn)Tokens令牌的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04Git基礎(chǔ)之git在項(xiàng)目中的協(xié)作模式
這篇文章主要為大家介紹了Git基礎(chǔ)之git在項(xiàng)目中的協(xié)作模式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04