HTTPS (全稱:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全爲目標的 HTTP 通道,在HTTP的基礎上經過傳輸加密和身份認證保證了傳輸過程的安全性。HTTPS 在 HTTP 的基礎下加入 SSL/TSL 層,HTTPS 的安全基礎是 SSL/TSL,所以加密的詳細內容就須要 SSL/TSL。安全
經過 SSL/TSL 層進行傳輸加密和身份認證,創建一個安全的信息傳輸通道,來保證信息傳輸過程當中不被竊聽、假裝和篡改。加密
在具體研究SSL/TSL層以前,咱們先來本身看看怎麼解決 HTTP 的問題。cdn
首先,由於 HTTP 是明文傳輸,在整個傳輸過程當中,傳輸內容都是直接可見的,要保證這一點的安全性,那麼就須要一點,傳輸內容只能被通訊雙方看懂,其餘人即便看到傳輸的內容,他也沒法解讀出真實內容,因此咱們須要對內容進行加密。blog
A 和 B 都使用一樣的一個加密規則來對內容進行加密,在接收到信息後,用這個加密規則解密出真實內容,這樣的加密方式就是對稱加密,即加解密的密鑰相同。it
過程:io
A 和 B 都知道紙條內的字母須要按照字母順序移動3位進行解讀class
A 要發送 secret message,按規則轉爲 pbzobq jbppxdb基礎
A => B: pbzobq jbppxdblazyload
C 截獲到 pbzobq jbppxdb (這是啥?)請求
B 接收到 pbzobq jbppxdb => secret message
若是說這個密鑰是徹底安全保密的,除了 A 和 B,沒有其餘人知道這個密鑰,那麼這樣的加密方式就是安全的。可是,A 和 B 在以前沒有接觸過的狀況下,要怎麼肯定下這個密鑰?若是這個密鑰也先經過 HTTP 進行傳輸,那麼其餘人就能夠截獲這個密鑰,問題又回到了最初的狀態。
既然由於傳輸相同的加解密鑰會被人截獲,那麼若是隻由接收方 B 來解密,發送方 A 來加密,那麼其餘人因爲沒有這個解密密鑰,就沒法對內容進行解密了。就好比,A 先跟 B 發送一隻鴿子跟 B 要個盒子,B 發送給 A 一隻帶了沒有鎖上盒子的鴿子,A 拿到盒子後,將紙條放入盒子而且上鎖,送回給 B,B 收到盒子後用鑰匙打開拿到紙條。
過程:
A 給 B 飛了一隻鴿子🐦
B 給 A 飛了一隻鴿子🐦,鴿子帶着一個盒子,盒子上有鎖🔒,可是鎖沒有鎖上
A 把紙條放到盒子中,把鎖🔒鎖上,用鴿子🐦飛給 B
B 收到盒子,用鑰匙🔑打開盒子,拿出紙條
C 由於沒有鑰匙,因此無法開鎖拿到盒子內的紙條,因此紙條是安全的,這種方式就是非對稱加密啊,盒子爲公鑰,鑰匙爲私鑰。
可是這裏面有個問題,若是第二步中,這個鴿子帶的盒子1被 C 換成盒子2,那麼 A 拿到的盒子2並將紙條放到盒子2中,紙條也就被 C 拿到了,這時候 C 再將紙條放到盒子1 中,發回給 B,因此咱們須要保證 A 可以知道這個盒子是可靠的,沒有被替換過,這就須要一個權威的人 X 來給這個盒子打上特殊標記,不被信任的人是沒法標記盒子的,這樣 A 就能識別這個盒子了。X 就是一個權威認證機構。
過程:
A 給 B 飛了一隻鴿子🐦
B 給 A 飛了一隻鴿子🐦,鴿子帶着一個有標記的盒子,盒子上有鎖🔒,可是鎖沒有鎖上
A 拿出標記識別指南,對比盒子的標記,發現是 B 的盒子,把紙條放到盒子中,把鎖🔒鎖上,用鴿子🐦飛給 B
B 收到盒子,用鑰匙🔑打開盒子,拿出紙條
如今 A 和 B 經過這種方式,就能夠進行安全的通訊了,可是每次傳紙條都須要進行這些步驟是很累的,並且鴿子那麼小,老是帶着個沉重的盒子,會很累,飛的慢。因此回到前面對稱加密方式那裏,是否是咱們只要保證對稱加密的密鑰不被 C 知道,那麼通訊就是安全的?因此咱們經過上面非對稱加密的方式來傳輸對稱加密的密鑰,確保這個密鑰是安全的就行了,鴿子就不須要每次都帶個沉重的盒子。
HTTP 存在被竊聽、被假裝和被篡改的可能,HTTPS 經過增長 SSL/TSL 層進行傳輸加密和身份認證,確保通訊通道的安全,使用非對稱加密來加密對稱加密使用的密鑰,須要權威機構的認證來確保證書公鑰的可靠性,以上就是 HTTPS 比 HTTP多出來的內容啦。