鬆哥原創的 Spring Boot 視頻教程已經殺青,感興趣的小夥伴戳這裏-->Spring Boot+Vue+微人事視頻教程java
原文:https://blog.leapmie.com/archives/418/web
你們都知道 HTTPS 比 HTTP 安全,也據說過與 HTTPS 協議相關的概念有 SSL 、非對稱加密、 CA 證書等。算法
但對於如下靈魂三拷問可能就答不上了:瀏覽器
爲何用了 HTTPS 就是安全的?安全
HTTPS 的底層原理如何實現?服務器
用了 HTTPS 就必定安全嗎?微信
HTTPS 的實現原理網絡
HTTPS 的總體過程分爲證書驗證和數據傳輸階段,具體的交互過程以下:app
瀏覽器發起 HTTPS 請求。編輯器
服務端返回 HTTPS 證書。
客戶端驗證證書是否合法,若是不合法則提示告警。
當證書驗證合法後,在本地生成隨機數。
經過公鑰加密隨機數,並把加密後的隨機數傳輸到服務端。
服務端經過私鑰對隨機數進行解密。
服務端經過客戶端傳入的隨機數構造對稱加密算法,對返回結果內容進行加密後傳輸。
爲何數據傳輸是用對稱加密?
爲何須要 CA 認證機構頒發證書?
「中間人攻擊」的具體過程以下:
本地請求被劫持(如 DNS 劫持等),全部請求均發送到中間人的服務器。
中間人服務器返回中間人本身的證書。
客戶端建立隨機數,經過中間人證書的公鑰對隨機數加密後傳送給中間人,而後憑隨機數構造對稱加密對傳輸內容進行加密傳輸。
中間人由於擁有客戶端的隨機數,能夠經過對稱加密算法進行內容解密。
中間人以客戶端的請求內容再向正規網站發起請求。
由於中間人與服務器的通訊過程是合法的,正規網站經過創建的安全通道返回加密後的數據。
中間人憑藉與正規網站創建的對稱加密算法對內容進行解密。
中間人經過與客戶端創建的對稱加密算法對正規內容返回的數據進行加密傳輸。
客戶端經過與中間人創建的對稱加密算法對返回結果數據進行解密。
瀏覽器是如何確保 CA 證書的合法性?
①證書包含什麼信息?
頒發機構信息
公鑰
公司信息
域名
有效期
指紋
......
②證書的合法性依據是什麼?
③瀏覽器如何驗證證書的合法性?
驗證域名、有效期等信息是否正確。證書上都有包含這些信息,比較容易完成驗證。
判斷證書來源是否合法。每份簽發證書均可以根據驗證鏈查找到對應的根證書,操做系統、瀏覽器會在本地存儲權威機構的根證書,利用本地根證書能夠對對應機構簽發證書完成來源驗證。
判斷證書是否被篡改。須要與 CA 服務器進行校驗。
判斷證書是否已吊銷。經過 CRL(Certificate Revocation List 證書註銷列表)和 OCSP(Online Certificate Status Protocol 在線證書狀態協議)實現。
其中 OCSP 可用於第 3 步中以減小與 CA 服務器的交互,提升驗證效率。
這裏插一個我想了好久的但其實答案很簡單的問題:既然證書是公開的,若是要發起中間人攻擊,我在官網上下載一份證書做爲個人服務器證書,那客戶端確定會認同這個證書是合法的,如何避免這種證書冒用的狀況?
其實這就是非加密對稱中公私鑰的用處,雖然中間人能夠獲得證書,但私鑰是沒法獲取的。
一份公鑰是不可能推算出其對應的私鑰,中間人即便拿到證書也沒法假裝成合法服務端,由於沒法對客戶端傳入的加密數據進行解密。
④只有認證機構能夠生成證書嗎?
例如早期的 12306 採用的即是手動安裝私有證書的形式實現 HTTPS 訪問。
本地隨機數被竊取怎麼辦?
用了 HTTPS 會被抓包嗎?
總結
順手分享一張學習 HTTPS 的過程圖:
今日干貨
公衆號後臺回覆 2TB,免費獲取 2TB Java 學習資料。
你在看嗎
本文分享自微信公衆號 - 江南一點雨(a_javaboy)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。