SSL類似于TCP的三次握手,在HTTP鏈接建立之前進(jìn)行四次握手,從而客戶度和服務(wù)端溝通好HTTP傳輸時(shí)對(duì)稱加密的密鑰,大致過程如下圖:

1、客戶端請(qǐng)求建立SSL鏈接,并向服務(wù)端發(fā)送一個(gè)隨機(jī)數(shù)–Client random和客戶端支持的加密方法,比如RSA公鑰加密,此時(shí)是明文傳輸。
2、服務(wù)端回復(fù)一種客戶端支持的加密方法、一個(gè)隨機(jī)數(shù)–Server random、授信的服務(wù)器證書和非對(duì)稱加密的公鑰。
3、客戶端收到服務(wù)端的回復(fù)后利用服務(wù)端的公鑰,加上新的隨機(jī)數(shù)–Premaster secret 通過服務(wù)端下發(fā)的公鑰及加密方法進(jìn)行加密,發(fā)送給服務(wù)器。
4、服務(wù)端收到客戶端的回復(fù),利用已知的加解密方式進(jìn)行解密,同時(shí)利用Client random、Server random和Premaster secret通過一定的算法生成HTTP鏈接數(shù)據(jù)傳輸?shù)膶?duì)稱加密key – session key。
此后的HTTP鏈接數(shù)據(jù)傳輸即通過對(duì)稱加密方式進(jìn)行加密傳輸。
再來看看非對(duì)稱加密,非對(duì)稱加密有兩個(gè)密鑰,公鑰和私鑰,公鑰公開,私鑰私有。
非對(duì)稱加密的例子
加密:
A想要傳輸信息給B,那么B首先生成公鑰和私鑰,公鑰發(fā)送給A,私鑰保留,A收到B的公鑰之后,將信息利用公鑰加密,然后傳輸給B,B通過私鑰解密。
防止篡改:
B想要給A發(fā)送一個(gè)證明,那么B首先生成公鑰和私鑰,利用私鑰加密證明生成加密文件,然后將證明和加密文件以及公鑰一同發(fā)送給A,A收到之后,利用公鑰將加密文件解密,然后對(duì)比證明,如果相同,則可以認(rèn)為證明沒有被篡改過。
[1]http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
[2]http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html