參考了這篇文章
https://www.oschina.net/translate/https-explained-with-carrier-pigeons
下面說一下我自己的理解。
先設(shè)定5個角色:愛麗絲,鮑勃, 馬洛里, 信鴿, 泰德
- HTTP
愛麗絲給鮑勃發(fā)信,把信綁到信鴿的腿上,由信鴿傳遞。
這時候信鴿可能會被馬洛里這個壞蛋截住,他能獲取信中的內(nèi)容并且對內(nèi)容進行篡改,然后再發(fā)到鮑勃手中。
信的內(nèi)容是明文傳遞的,這很不安全。
- 對稱加密
上面?zhèn)鬟f的方式很不安全,于是愛麗絲和鮑勃就想把信的內(nèi)容加密一下再傳遞,這樣馬洛里就算獲取了信中的內(nèi)容也不知道怎么解密。
愛麗絲想給鮑勃發(fā)信, 她想把傳送的消息的每個字母都往后移兩位,比如I Love You 就變成了K Nqxg Aqw。
但是鮑勃不知道怎么解密啊,于是愛麗絲需要先把加密的方式也就是密鑰:每個字母后移兩位告訴鮑勃,那鮑勃看到后就知道把收到的消息左移兩位就可以了。 搞定!
但是大家看到問題了嗎?問題就是如果最開始發(fā)送的密鑰被馬洛里截獲呢?那之后愛麗絲跟鮑勃的信都能被馬洛里破解。 這也不安全。
- 非對稱加密
愛麗絲和鮑勃想出來了一個很有效的方式可以避免他們的信被馬洛里看到,但是每次發(fā)信都要經(jīng)過4個步驟:
a. 愛麗絲先把信鴿發(fā)給鮑勃(發(fā)一個空的消息)
b. 鮑勃把一個沒有鎖上的空盒子綁在鴿子腿上,發(fā)給愛麗絲
c. 愛麗絲把信的內(nèi)容放到盒子里,鎖上,讓鴿子發(fā)給鮑勃
d. 鮑勃用手里面的鑰匙打開盒子,然后拿到信
這樣已經(jīng)安全多了,這就是非對稱加密算法。但是還有一個問題。
萬一在b步驟馬洛里把信鴿截獲, 換了一個盒子怎么辦,這樣的話盒子發(fā)到愛麗絲手里,她不知道這個盒子是鮑勃的還是馬洛里的,這該怎么辦呢?
- 簽名
鮑勃把盒子發(fā)給愛麗絲之前,在盒子上簽上自己的名字, 這樣愛麗絲看到這個簽名就能知道是鮑勃發(fā)過來的了。
但是。。。如果是馬洛里偽造鮑勃的簽名怎么辦呢?
- 認證機構(gòu)
泰德終于要出場了,泰德是一個很有名的人,值得信任,他會給任何人簽名,并且大家都只信任由他認證的合法的簽名,這樣用泰德認證過的簽名來標記盒子是由鮑勃發(fā)出來的而不是馬洛里。 馬洛里也不可能獲取到一個由泰德代表鮑勃簽名盒子。泰德就是這樣的認證機構(gòu), 愛麗絲可以信任鮑勃發(fā)給她的盒子因為泰德告訴她這個盒子是合法的。
- 高效的HTTPS
如果用非對稱加密技術(shù)來發(fā)信比對稱加密要慢,為什么呢,因為每次都要先發(fā)個鴿子,然后收到一個盒子,然后再發(fā)送信的內(nèi)容,這樣太慢了。
于是愛麗絲和鮑勃決定只在第一次訪問的時候發(fā)送盒子,愛麗絲把對稱加密的密鑰放到盒子里面發(fā)給鮑勃,保證了只有他們兩人知道密鑰,在之后的飛鴿傳書時只發(fā)送加了密的信,馬洛里不知道密鑰所以也無法破解信中的內(nèi)容了。
這種方法兼具了非對稱加密的安全和對稱加密的高效,所以HTTPS是結(jié)合了二者的優(yōu)點, 只有在交換密鑰的時候才會用非對稱加密技術(shù)。