一、總結(jié):兩次交互過(guò)程,三個(gè)秘鑰。
第一次交互:用非對(duì)稱加密的公鑰和私鑰商量下通信使用的真實(shí)秘鑰
第二次交互:用真實(shí)秘鑰進(jìn)行加密通信
詳情如下:
HTTPS在傳輸?shù)倪^(guò)程中會(huì)涉及到三個(gè)密鑰:
服務(wù)器端的公鑰和私鑰,用來(lái)進(jìn)行非對(duì)稱加密
客戶端生成的隨機(jī)密鑰,用來(lái)進(jìn)行對(duì)稱加密
二、過(guò)程描述:
一個(gè)HTTPS請(qǐng)求實(shí)際上包含了兩次HTTP傳輸,可以細(xì)分為8步。
1.客戶端向服務(wù)器發(fā)起HTTPS請(qǐng)求,連接到服務(wù)器的443端口
2.服務(wù)器端有一個(gè)密鑰對(duì),即公鑰和私鑰,是用來(lái)進(jìn)行非對(duì)稱加密使用的,服務(wù)器端保存著私鑰,不能將其泄露,公鑰可以發(fā)送給任何人。
3.服務(wù)器將自己的公鑰發(fā)送給客戶端。
4.客戶端收到服務(wù)器端的公鑰之后,會(huì)對(duì)公鑰進(jìn)行檢查,驗(yàn)證其合法性,如果發(fā)現(xiàn)發(fā)現(xiàn)公鑰有問(wèn)題,那么HTTPS傳輸就無(wú)法繼續(xù)。嚴(yán)格的說(shuō),這里應(yīng)該是驗(yàn)證服務(wù)器發(fā)送的數(shù)字證書的合法性,關(guān)于客戶端如何驗(yàn)證數(shù)字證書的合法性,下文會(huì)進(jìn)行說(shuō)明。如果公鑰合格,那么客戶端會(huì)生成一個(gè)隨機(jī)值,這個(gè)隨機(jī)值就是用于進(jìn)行對(duì)稱加密的密鑰,我們將該密鑰稱之為client key,即客戶端密鑰,這樣在概念上和服務(wù)器端的密鑰容易進(jìn)行區(qū)分。然后用服務(wù)器的公鑰對(duì)客戶端密鑰進(jìn)行非對(duì)稱加密,這樣客戶端密鑰就變成密文了,至此,HTTPS中的第一次HTTP請(qǐng)求結(jié)束。
5.客戶端會(huì)發(fā)起HTTPS中的第二個(gè)HTTP請(qǐng)求,將加密之后的客戶端密鑰發(fā)送給服務(wù)器。
6.服務(wù)器接收到客戶端發(fā)來(lái)的密文之后,會(huì)用自己的私鑰對(duì)其進(jìn)行非對(duì)稱解密,解密之后的明文就是客戶端密鑰,然后用客戶端密鑰對(duì)數(shù)據(jù)進(jìn)行對(duì)稱加密,這樣數(shù)據(jù)就變成了密文。
7.然后服務(wù)器將加密后的密文發(fā)送給客戶端。
8.客戶端收到服務(wù)器發(fā)送來(lái)的密文,用客戶端密鑰對(duì)其進(jìn)行對(duì)稱解密,得到服務(wù)器發(fā)送的數(shù)據(jù)。這樣HTTPS中的第二個(gè)HTTP請(qǐng)求結(jié)束,整個(gè)HTTPS傳輸完成。