HTTPS 之原理
HTTPS
和 HTTP
協議相比提供了
- 資料完整性:內容傳輸經過完整性校驗
- 資料隱私性:內容經過對稱加密,每個連線生成一個唯一的加密金鑰
- 身份認證:第三方無法偽造服務端(客戶端)身份
原理
HTTPS
在傳輸資料之前需要客戶端與服務端之間進行一次握手,在握手過程中將確立雙方加密傳輸資料的密碼資訊。 TLS/SSL
協議是一套加密傳輸的協議,使用了非對稱加密,對稱加密以及 HASH
演算法。以瀏覽器和伺服器為例, HTTPS
通訊過程如下:

image
-
瀏覽器發起往伺服器的
443
埠發起請求,請求攜帶了瀏覽器支援的加密演算法和雜湊演算法。 -
伺服器收到請求,選擇瀏覽器支援的加密演算法和雜湊演算法。
-
伺服器下將
CA
證書 返回給瀏覽器。採用
HTTPS
協議的伺服器必須要有自己製作或者CA
證書,區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用CA
證書則不會彈出提示頁面。這套證書其實就是一對公鑰和私鑰。公鑰給別人加密使用,私鑰給自己解密使用。 -
瀏覽器解析證書
R
-
傳送加密資訊
這部分傳送的是用證書加密後的隨機數
R
,目的就是讓伺服器得到這個隨機數R
,以後瀏覽器和伺服器的通訊就可以通過這個隨機數R
來進行加密解密了。 -
伺服器解密瀏覽器傳過來的加密資訊
服務端用私鑰解密後,得到了客戶端傳過來的隨機數
R
,然後把內容通過隨機數R
進行對稱加密。 -
伺服器以隨機數
R
為金鑰把傳輸內容使用對稱加密演算法加密並傳輸給瀏覽器。 -
瀏覽器以隨機數
R
為金鑰使用之前約定好的解密演算法獲取加密內容。
中間人攻擊原理

中間人攻擊原理
針對SSL的中間人攻擊方式主要有兩類,分別是SSL劫持攻擊和SSL剝離攻擊,詳細請看 中間人攻擊原理 。
預防中間人攻擊
解決辦法:
HTTPS
雙向驗證在客戶端中內建伺服器公鑰,在伺服器下將 CA
證書給瀏覽器的時候返回的公鑰,服務端要求客戶端傳送客戶端的證書,客戶端會將自己的證書傳送至服務端。除了驗證公鑰的有效性之外,再比對公鑰是不是和內建的公鑰一樣,不一樣說明被中間者攻擊了,就斷開連結不在請求了。
Https雙向認證