https跳過證書校驗底層原理

背景

  大家可能遇到過爬蟲或者curl某個https站點,由於站點TLS證書過期或者使用自簽證書,curl或者瀏覽器校驗不通過,導致不能正常訪問。 所以類似什麼Java中怎麼跳過https證書校驗,php怎麼跳過,python怎麼跳過等等問題全網遍地都是。 但是你知道跳過https證書底層到底幹了什麼事情呢? https不懂的同學可以先簡單看我的一篇文章: https加密和解密過程。網上太多人只講通過校驗後怎麼樣, 很少講不校驗證書怎麼樣,很是蛋疼,全網文章幾乎沒人提到。

  疑問1: 困惑了我幾天的問題, 一般來說正常的https通過校驗的情況, 如訪問https:/www.baidu.com爲例。拿到證書, os內置或者瀏覽器內置根證書的public key,public key解密證書內容,拿到內容進行hash比較,域名校驗等等,通過校驗則拿到網站的公鑰, 之後走ssl握手協議一系列操作之後, 協商出"會話密鑰"進行後邊的通信。 那麼問題來了, 假設我訪問自簽證書的網站,使用curl -k(跳過證書合法性校驗), 不校驗證書正確性, 由於os/瀏覽器根本就沒有這個自簽證書的public key, 那肯定解密不出證書的數據, 例如server的公鑰,那不是和正常流程又有區別了, 但是還是能訪問的頁面內容,這個就很奇怪。那麼後面的通信又是怎麼進行的呢? 是否還走加密通信方式? 以及server公鑰從證書裏拿不出來的問題。

個人總結

  參考知乎 如果沒有有效的證書,HTTPS連接是否加密的? 此人回答瞬間茅塞頓開。
在這裏插入圖片描述

  對於上面的疑惑: 跳過https校驗是否還走加密通信的方式? 底層實現,證書解不開,server端公鑰拿不到又怎麼解釋?

  1. 肯定還是走TLS加密通信。 因爲人家網站就是基於https的,肯定是加密的,這個不用質疑,不會存在說你跳過證書校驗就不走加密了。
  2. TLS可以分爲2個功能方面來理解,1是 ca證書身份認證,2是後面數據進行加密通信,保證在傳輸過程中不被篡改。 兩個方面沒有必然前置關係, 也就是ca證書校驗是可以在客戶端進行選擇校驗還是不校驗,和下面第2步加密通信無關,校驗就走校驗規則,不校驗也可以走第2個步驟繼續加密通信。 只是說, 這時候由於證書解密解不出來,server的公鑰拿不出來了, 那系統就不能走RSA非對稱加密算法來傳遞"會話密鑰", TLS客戶端會自動轉化使用DH算法(個人理解:類似生成臨時非對稱加密祕鑰對,是傳遞"會話密鑰"),完成後面加密通信的過程。
  3. 使用自籤TLS證書通信雖然是加密的,但是https身份認證的功能也就蕩然無存了 。任何人都可以自簽發證書,容易受到中間人攻擊以及僞裝。 中間人也自己簽發證書,替換掉你的證書,客戶端也察覺不到的。誰叫你自己不校驗呢? 就像電話詐騙, 警察再三提醒你對法對方可能是騙子(不安全提示), 你還是傻不拉幾地堅持匯款,那肯定是能匯款的啊,銀行又不能阻止你匯款,但是後果自己承擔。                                                                                                   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章