https原理推導

https流程

流程如下:

https流程

https原理推導

  1. 因爲http的內容是透明傳輸的,所以被劫持之後通信內容就全部泄露了。所以,必須要對通信內容進行加密。目前主流的加密方法分爲對稱加密和非對稱加密,https選用的是對稱加密。
    問題1:爲什麼不選用非對稱加密?
      假設選用非對稱加密,那麼客戶端使用公鑰加密通信內容,然後服務端使用私鑰解密,從客戶端到服務端的鏈路可行。而服務端返回數據使用私鑰加密,然後客戶端使用公鑰解密,這樣就是存在問題的。因爲劫持方也可以獲取到服務端的公鑰,所以劫持通信內容之後也可以解密。若服務端返回數據使用公鑰加密,那客戶端必須要使用私鑰解密。所以客戶端必須要知道服務端的額私鑰。這是很危險的,因爲劫持方也可以僞裝成正常用戶訪問服務端拿到私鑰。而且非對稱機密的性能遠小於對稱加密,所以綜合起來選擇對稱加密。
  2. 服務端和服務端怎麼確定對稱加密的密碼?可以使用非對稱加密的方法,客戶端使用服務端的公鑰加密對稱加密的密碼然後傳送給服務端,然後服務端使用私鑰解密。
  3. 服務端將公鑰傳送給客戶端的過程怎麼防止中間人劫持替換公鑰?https的做法是將公鑰以數字證書的方式發送給客戶端,且證書中的公鑰被第三方CA機構的私鑰加密過。客戶端在拿到證書之後使用第三方CA機構的公鑰解密即可得到服務端公鑰。這樣如果中間人使用自己僞造的一個假證書做中間人劫持時,那麼客戶端將無法成功使用CA機構的公鑰解密假證書的公鑰。
  4. 若中間人也持有一個由相同CA機構頒發的數字證書,中間人只需要將數字證書中的被加密的公鑰替換成自己被CA私鑰加密的公鑰,依然可以成功實現中間人劫持,此時客戶端使用CA機構的公鑰可以成功解密出數字證書中的公鑰。所以需要解決同一機構頒發的不同證書被篡改的問題。
  5. https使用數字簽名的方法來解決這一問題。數字證書會有一個數字簽名,而簽名算法在數字證書中也
    會給出。客戶端拿到證書後只需要按照證書中的簽名算法對證書內容進行簽名就可以得到一個數字簽名,然後再與證書中的數字簽名進行比對,得知證書是否被篡改過。
  6. 上述方法依然不可靠,因爲中間人也可以模仿客戶端,在篡改證書的公鑰之後重新生成數字簽名。
  7. https防止中間人模仿簽名的行爲,方法是使用CA機構的私鑰對證書的數字簽名進行加密,這樣就算中間人篡改了證書的公鑰,然後重新生成了數字簽名,由於不知道CA機構的私鑰所以無法對數字簽名加密,所以客戶端無法成功解密。這樣就徹底防止了數字證書篡改,就保證了數字證書一定是CA機構頒發的合法且沒有被篡改的證書。
    問題2:若中間人擁有一個同一CA機構頒發的合法證書,劫持之後不篡改證書,而是替換整個證書,這樣在客戶端看來,簽名是有效的,依然會劫持成功,怎麼防止?
      因爲證書中有網站的域名信息,所以可以通過域名來判斷證書是否被替換,因爲如果證書被替換了,那麼證書裏面的域名肯定和你要訪問網站的域名不同。

CA證書

  CA機構下發給網站的證書都是一個證書鏈,也就是一層一層的證書,從根證書開始,到下級CA,一層一層,最後一層就是網站證書。瀏覽器收到服務器發送的證書後,需要驗證其真實性。而證書的簽名是通過簽名算法和上級CA的私鑰生成的,並非上面說的簡單靠CA機構的私鑰生成。瀏覽器需要用上級CA的公鑰才能解密簽名,並與生成的指紋對比,那麼問題來了,這個上級CA的公鑰從哪來呢?此公鑰來自於證書鏈該層的上級CA的證書明文內,X509v3證書中包含了公鑰信息。證書鏈由多個證書一層一層組成的,除了最底層的網站證書的公鑰是給用戶加密報文外,其他層證書中的公鑰均用於解密底層的證書指紋簽名。最高層的根證書是自簽名的,也就是自己頒發給自己,所以它的公鑰不僅用來解密下層的簽名,也用來給自己的簽名解密。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章