http傳輸如下:

此時信息是明文傳輸,如果信息被人截獲,則能看到里面的內(nèi)容,極不安全
那就需要對內(nèi)容加密,過程如下:
- 瀏覽器生成一個秘鑰
- 瀏覽器向服務(wù)器請求公鑰
- 服務(wù)器向瀏覽器發(fā)送它的公鑰
- 瀏覽器接收服務(wù)器發(fā)送的公鑰,并使用公鑰加密隨機生成的對稱密鑰,發(fā)送給服務(wù)器
- 服務(wù)器接收瀏覽器發(fā)送的數(shù)據(jù),用自身私鑰,得到對稱加密密鑰
- 最后,瀏覽器和服務(wù)器可以使用對稱密鑰加密內(nèi)容進(jìn)行通信
但此方案仍會存在安全隱患,在第三步和第四步之間,如果被一個中間人獲取到它的公鑰,瀏覽器使用中間人的公鑰加密對稱密鑰,發(fā)送給服務(wù)器,中間人再次截獲數(shù)據(jù),獲取其中的對稱密鑰。瀏覽器和服務(wù)器在雙方數(shù)據(jù)都不知情的情況下,數(shù)據(jù)內(nèi)容被窺探。
問題的重點在于,第三步瀏覽器無法得到公鑰的來源的合法性,這就需要數(shù)字證書了。這就是https的解決方案
服務(wù)端單單發(fā)送公鑰,而是發(fā)送包含公鑰的數(shù)字證書。
數(shù)字證書由第三方機構(gòu)頒發(fā),瀏覽器已經(jīng)維護(hù)了所有知名的第三方機構(gòu)。
瀏覽器如何確定公鑰的合法性?
- 在接收數(shù)字證書時,查看證書的有效期
- 根據(jù)數(shù)字證書的第三方機構(gòu)名稱,找到對應(yīng)的公鑰,解密數(shù)字簽字,得到hash1
- 根據(jù)服務(wù)端網(wǎng)址等信息,使用簽名算法,生成hash2
- 如果hash1等于hash2,則公鑰合法

公鑰和私鑰的相關(guān)知識
公鑰和私鑰是一對密鑰對,它們可以互解密。使用公鑰加密,私鑰解密。能有效保證數(shù)據(jù)的安全性。但是如果使用私鑰加密,公鑰解密呢,則可以確定來源的合法性。因為只有知道私鑰才能加密,如果我們能使用公鑰解密得到正常內(nèi)容(內(nèi)容是否正確就是比較hash1和hash2),那么對方一定是擁有私鑰的主機,而私鑰是由第三方頒發(fā)給服務(wù)器的,這就是數(shù)字簽名。
OSI七層
物理層->數(shù)據(jù)鏈路層->網(wǎng)絡(luò)層->傳輸層->會話層->表示層->應(yīng)用層
https的ssl位于傳輸層和應(yīng)用層之間