相信做IT的程序員們對(duì)https都不陌生始藕,目前幾乎所有的請(qǐng)求都基于https蒲稳,但究竟它整個(gè)發(fā)送的過(guò)程是什么呢?想徹底搞明白https伍派,細(xì)致的把每一個(gè)環(huán)節(jié)都弄清楚就很重要了江耀。
首先,準(zhǔn)備工作如下:
1.服務(wù)端生成自己的公私鑰(具體方法可以百度)诉植,公鑰S.pub祥国,私鑰S.pri
2.將公鑰S.pub給權(quán)威的CA機(jī)構(gòu)(花錢(qián))
3.CA機(jī)構(gòu)生成公私鑰CA.pub和CA.pri。再使用CA.pri對(duì)你的S.pub簽名生成CA證書(shū)晾腔,再將CA證書(shū)頒發(fā)給服務(wù)器舌稀。
4.各個(gè)電腦手機(jī)等終端生產(chǎn)的時(shí)候都內(nèi)置了CA機(jī)構(gòu)的根證書(shū),CA的公鑰CA.pub灼擂。
到此壁查,服務(wù)端申請(qǐng)證書(shū)過(guò)程已經(jīng)結(jié)束,通信前的工作就完成了剔应,接下來(lái)就是服務(wù)器和各客戶(hù)端的交互了睡腿。
1.客戶(hù)端生成隨機(jī)數(shù)Random_C语御,向服務(wù)器發(fā)送客戶(hù)端的SSL版本和支持的加密算法、Random_C
2.服務(wù)端生成的隨機(jī)數(shù)Random_S席怪,服務(wù)器返回選好的加密算法和Hash算法应闯、隨機(jī)數(shù)Random_S。同時(shí)返回CA證書(shū)挂捻,里面包含公鑰S.pub碉纺、證書(shū)的頒發(fā)機(jī)構(gòu)、有效期等信息
3.客戶(hù)端收到這些后刻撒,用本地的CA根證書(shū)骨田、CA.pub去驗(yàn)證服務(wù)器給的證書(shū)的合法性。若合法繼續(xù)下一步疫赎,不合法則斷開(kāi),提示用戶(hù)
4.驗(yàn)證合法后碎节,客戶(hù)端計(jì)算產(chǎn)生隨機(jī)數(shù)字pre-master捧搞,使用S.pub加密。根據(jù)兩個(gè)明文隨機(jī)數(shù)Random_C狮荔、Random_S和pre-master計(jì)算得出對(duì)稱(chēng)密鑰 enc_key = Fun(Random_C胎撇、Random_S、pre-master)殖氏。使用約定的hash算法計(jì)算摘要晚树,并使用對(duì)稱(chēng)密鑰enc_key加密
5.將上面生成的所有信息(加密后的pre-master、加密的摘要信息)發(fā)送給服務(wù)端
6.服務(wù)器使用S.pri對(duì)pre-master解密雅采,結(jié)合Random_C爵憎、Random_S,計(jì)算得出對(duì)稱(chēng)密鑰婚瓜。再使用hash算法計(jì)算摘要信息宝鼓,使用對(duì)稱(chēng)密鑰解密客戶(hù)端發(fā)過(guò)來(lái)的信息,驗(yàn)證密鑰的正確性
7.根據(jù)摘要信息生成數(shù)據(jù)巴刻,并使用對(duì)稱(chēng)密鑰加密發(fā)給客戶(hù)端愚铡。客戶(hù)端驗(yàn)證胡陪,驗(yàn)證通過(guò)則握手完成沥寥。
8.此后,客戶(hù)端和服務(wù)端使用上述的對(duì)稱(chēng)密鑰enc_key加密/解密進(jìn)行通信