加密流程
1.客戶端發(fā)起請(qǐng)求,將自己支持的加密算法套件(Cipher Suite)發(fā)給服務(wù)端勒叠。
2.服務(wù)端收到請(qǐng)求后膏孟,將收到的cipher與自己支持的對(duì)比拌汇,從中選出一種加密算法和HASH算法,以證書(shū)的形式返回給客戶端 證書(shū)中還包含了 公鑰 頒證機(jī)構(gòu) 網(wǎng)址 失效日期等等幕垦,如果不支持則連接斷開(kāi)傅联。
3.客戶端收到服務(wù)端響應(yīng)后會(huì)做以下幾件事
??3.1 驗(yàn)證證書(shū)的合法性
??頒發(fā)證書(shū)的機(jī)構(gòu)是否合法與是否過(guò)期,證書(shū)中包含的網(wǎng)站地址是否與正在訪問(wèn)的地址一致等
??證書(shū)驗(yàn)證通過(guò)后仇奶,在瀏覽器的地址欄會(huì)加上一把小鎖(每家瀏覽器驗(yàn)證通過(guò)后的提示不一樣 不做討論)
??3.2 生成隨機(jī)密碼
??如果證書(shū)驗(yàn)證通過(guò)比驻,或者用戶接受了不授信的證書(shū),此時(shí)瀏覽器會(huì)生成一串隨機(jī)數(shù)狈茉,然后用證書(shū)中的公鑰加密掸掸。
??3.3 HASH握手信息
??用最開(kāi)始約定好的HASH方式,把握手消息取HASH值堤撵, 然后用 隨機(jī)數(shù)對(duì)稱(chēng)加密 “握手消息+握手消息HASH值(簽名)” 并一起發(fā)送給服務(wù)端
??在這里之所以要取握手消息的HASH值羽莺,主要是把握手消息做一個(gè)簽名,用于驗(yàn)證握手消息在傳輸過(guò)程中沒(méi)有被篡改過(guò)荒给。
4.服務(wù)端拿到客戶端傳來(lái)的密文刁卜,用自己的私鑰來(lái)解密握手消息取出隨機(jī)數(shù)密碼,再用隨機(jī)數(shù)密碼 解密 握手消息與HASH值长酗,并與傳過(guò)來(lái)的HASH值做對(duì)比確認(rèn)是否一致。
然后用隨機(jī)密碼加密一段握手消息(握手消息+握手消息的HASH值 )給客戶端
5.客戶端用隨機(jī)數(shù)解密并計(jì)算握手消息的HASH之拨,如果與服務(wù)端發(fā)來(lái)的HASH一致,此時(shí)握手過(guò)程結(jié)束烁竭,之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機(jī)密碼并利用對(duì)稱(chēng)加密算法進(jìn)行加密
因?yàn)檫@串密鑰只有客戶端和服務(wù)端知道吉挣,所以即使中間請(qǐng)求被攔截也是沒(méi)法解密數(shù)據(jù)的,以此保證了通信的安全
非對(duì)稱(chēng)加密算法:RSA终吼,DSA/DSS 在客戶端與服務(wù)端相互驗(yàn)證的過(guò)程中用的是對(duì)稱(chēng)加密
對(duì)稱(chēng)加密算法:AES氯哮,RC4,3DES 客戶端與服務(wù)端相互驗(yàn)證通過(guò)后姆打,以隨機(jī)數(shù)作為密鑰時(shí)肠虽,就是對(duì)稱(chēng)加密
HASH算法:MD5,SHA1税课,SHA256 在確認(rèn)握手消息沒(méi)有被篡改時(shí)