用 HTTPS 就安全了?HTTPS 會被抓包嗎?

原文:https://blog.leapmie.com/archives/418/
大家都知道 HTTPS 比 HTTP 安全,也聽說過與 HTTPS 協(xié)議相關(guān)的概念有 SSL 、非對稱加密、 CA 證書等。
但對于以下靈魂三拷問可能就答不上了:
為什么用了 HTTPS 就是安全的?
HTTPS 的底層原理如何實現(xiàn)?
用了 HTTPS 就一定安全嗎?
HTTPS 的實現(xiàn)原理
HTTPS 的整體過程分為證書驗證和數(shù)據(jù)傳輸階段,具體的交互過程如下:

瀏覽器發(fā)起 HTTPS 請求。
服務(wù)端返回 HTTPS 證書。
客戶端驗證證書是否合法,如果不合法則提示告警。
當(dāng)證書驗證合法后,在本地生成隨機數(shù)。
通過公鑰加密隨機數(shù),并把加密后的隨機數(shù)傳輸?shù)椒?wù)端。
服務(wù)端通過私鑰對隨機數(shù)進行解密。
服務(wù)端通過客戶端傳入的隨機數(shù)構(gòu)造對稱加密算法,對返回結(jié)果內(nèi)容進行加密后傳輸。
為什么數(shù)據(jù)傳輸是用對稱加密?
為什么需要 CA 認證機構(gòu)頒發(fā)證書?
“中間人攻擊”的具體過程如下:

本地請求被劫持(如 DNS 劫持等),所有請求均發(fā)送到中間人的服務(wù)器。
中間人服務(wù)器返回中間人自己的證書。
客戶端創(chuàng)建隨機數(shù),通過中間人證書的公鑰對隨機數(shù)加密后傳送給中間人,然后憑隨機數(shù)構(gòu)造對稱加密對傳輸內(nèi)容進行加密傳輸。
中間人因為擁有客戶端的隨機數(shù),可以通過對稱加密算法進行內(nèi)容解密。
中間人以客戶端的請求內(nèi)容再向正規(guī)網(wǎng)站發(fā)起請求。
因為中間人與服務(wù)器的通信過程是合法的,正規(guī)網(wǎng)站通過建立的安全通道返回加密后的數(shù)據(jù)。
中間人憑借與正規(guī)網(wǎng)站建立的對稱加密算法對內(nèi)容進行解密。
中間人通過與客戶端建立的對稱加密算法對正規(guī)內(nèi)容返回的數(shù)據(jù)進行加密傳輸。
客戶端通過與中間人建立的對稱加密算法對返回結(jié)果數(shù)據(jù)進行解密。
瀏覽器是如何確保 CA 證書的合法性?
①證書包含什么信息?
頒發(fā)機構(gòu)信息
公鑰
公司信息
域名
有效期
指紋
......
②證書的合法性依據(jù)是什么?
③瀏覽器如何驗證證書的合法性?
驗證域名、有效期等信息是否正確。證書上都有包含這些信息,比較容易完成驗證。
判斷證書來源是否合法。每份簽發(fā)證書都可以根據(jù)驗證鏈查找到對應(yīng)的根證書,操作系統(tǒng)、瀏覽器會在本地存儲權(quán)威機構(gòu)的根證書,利用本地根證書可以對對應(yīng)機構(gòu)簽發(fā)證書完成來源驗證。

判斷證書是否被篡改。需要與 CA 服務(wù)器進行校驗。
判斷證書是否已吊銷。通過 CRL(Certificate Revocation List 證書注銷列表)和 OCSP(Online Certificate Status Protocol 在線證書狀態(tài)協(xié)議)實現(xiàn)。
其中 OCSP 可用于第 3 步中以減少與 CA 服務(wù)器的交互,提高驗證效率。
這里插一個我想了很久的但其實答案很簡單的問題:既然證書是公開的,如果要發(fā)起中間人攻擊,我在官網(wǎng)上下載一份證書作為我的服務(wù)器證書,那客戶端肯定會認同這個證書是合法的,如何避免這種證書冒用的情況?
其實這就是非加密對稱中公私鑰的用處,雖然中間人可以得到證書,但私鑰是無法獲取的。
一份公鑰是不可能推算出其對應(yīng)的私鑰,中間人即使拿到證書也無法偽裝成合法服務(wù)端,因為無法對客戶端傳入的加密數(shù)據(jù)進行解密。
④只有認證機構(gòu)可以生成證書嗎?
例如早期的 12306 采用的便是手動安裝私有證書的形式實現(xiàn) HTTPS 訪問。

本地隨機數(shù)被竊取怎么辦?
用了 HTTPS 會被抓包嗎?
總結(jié)
順手分享一張學(xué)習(xí) HTTPS 的過程圖:


