HTTPS在HTTP的基礎(chǔ)上加入了SSL協(xié)議,SSL依靠證書來(lái)驗(yàn)證服務(wù)器的身份,并為瀏覽器和服務(wù)器之間的通信加密。具體是如何進(jìn)行加密,解密,驗(yàn)證的,且看下圖,下面的稱為一次握手。
1. 客戶端發(fā)起HTTPS請(qǐng)求
2. 服務(wù)端的配置
采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書,可以是自己制作或者CA證書。區(qū)別就是自己頒發(fā)的證書需要客戶端驗(yàn)證通過(guò),才可以繼續(xù)訪問(wèn),而使用CA證書則不會(huì)彈出提示頁(yè)面。這套證書其實(shí)就是一對(duì)公鑰和私鑰。公鑰給別人加密使用,私鑰給自己解密使用。
3. 傳送證書
這個(gè)證書其實(shí)就是公鑰,只是包含了很多信息,如證書的頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等。
4. 客戶端解析證書
這部分工作是有客戶端的TLS來(lái)完成的,首先會(huì)驗(yàn)證公鑰是否有效,比如頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等,如果發(fā)現(xiàn)異常,則會(huì)彈出一個(gè)警告框,提示證書存在問(wèn)題。如果證書沒(méi)有問(wèn)題,那么就生成一個(gè)隨即值,然后用證書對(duì)該隨機(jī)值進(jìn)行加密。
5. 傳送加密信息
這部分傳送的是用證書加密后的隨機(jī)值,目的就是讓服務(wù)端得到這個(gè)隨機(jī)值,以后客戶端和服務(wù)端的通信就可以通過(guò)這個(gè)隨機(jī)值來(lái)進(jìn)行加密解密了。
6. 服務(wù)段解密信息
服務(wù)端用私鑰解密后,得到了客戶端傳過(guò)來(lái)的隨機(jī)值(私鑰),然后把內(nèi)容通過(guò)該值進(jìn)行對(duì)稱加密。所謂對(duì)稱加密就是,將信息和私鑰通過(guò)某種算法混合在一起,這樣除非知道私鑰,不然無(wú)法獲取內(nèi)容,而正好客戶端和服務(wù)端都知道這個(gè)私鑰,所以只要加密算法夠彪悍,私鑰夠復(fù)雜,數(shù)據(jù)就夠安全。
7. 傳輸加密后的信息
這部分信息是服務(wù)段用私鑰加密后的信息,可以在客戶端被還原。
8. 客戶端解密信息
客戶端用之前生成的私鑰解密服務(wù)段傳過(guò)來(lái)的信息,于是獲取了解密后的內(nèi)容。
PS: 整個(gè)握手過(guò)程第三方即使監(jiān)聽到了數(shù)據(jù),也束手無(wú)策。