淺談HTTPS傳輸過程


HTTPS是什么

  HTTPS不是一個新的協議,可以理解為是一個HTTP協議的加密"版本"(HTTP+SSL(TLS))。那為什么HTTP協議需要加密,不加密會出現什么問題呢?先來了解下傳統的加密方式

加密方式

  

  對稱加密:對稱加密是Server和Client都拿一個相同的密鑰進行加密和解密,他的優點的性能好一點,但是也存在很多問題。

  問題

    1、服務器如何把密鑰安全的給到客戶端(存在請求被攔截、竄改)

    2、假設一個客戶端的密鑰泄露了被公開,所有的客戶端以及服務器的連接傳輸都是不安全的

 

    

  非對稱加密:非對稱加密將密鑰拆分為公鑰、私鑰,兩個秘鑰,私鑰存在服務器不能讓任何人知道,公鑰則可以隨意發布給任何客戶端。采用此加密方式,發送方將報文用公鑰加密后,接受方收到密文(加密后的報文)采用私鑰進行解密拿到報文,這種方式發送方就不用獲取私有就可以進行加密傳輸避免了密鑰泄露。雖然解決了對稱加密密鑰傳輸泄露問題,但是非對稱加密的性能肯定要比對稱加密的方式性能低很多。其實也會存在一些安全隱患:

  問題

    1、客戶端無法證明公鑰的來源的真實性(假設在服務端將公鑰分發給客戶端的過程中被攻擊者攔截,並換成其他的公鑰或者密鑰。或者是收到了非目標服務器的公鑰,兩者之間的數據傳輸將被阻斷)

    2、客戶端和服務端開始通訊時,MITM將客戶端請求攔截掉,將自己的公鑰發送給客戶端(客戶端以為是服務端返回的),偽造一個請求發送給服務端(服務端以為是客戶端發起的),拿到服務端的公鑰。那之后客戶端發送的數據,MITM可以用自己的私鑰解開,服務器返回的密文,MITM同樣也可以用公鑰解開。兩端的交互MITM都知道的一清二楚,並且客戶端和服務器也不會發現任何異常。當然此問題就算是HTTPS方式,過程中少了"內置公鑰"同樣也會發生,大家可以看完HTTPS傳輸過程后思考下。

HTTPS傳輸過程

  HTTPS綜合了兩種加密方式的優點,在密鑰交換時才用非對稱加密來保證安全性(當然這個安全性還是要和CA認證機構掛鈎,單純的非對稱加密肯定還是有問題的),在建立完橋梁時就采用對稱加密的方式進行request和response。

 

       

  • 以上有兩對公私鑰,一把是CA機構的公鑰和私鑰,一把是服務器的公鑰和私鑰。
  • 數字簽名由數字證書的明文內容組成然后通過CA機構私鑰進行加密后的密文(只有CA機構的公鑰可以打開)。
  • 步驟2內置公鑰的存在就是為了防止公鑰在網絡之中傳輸容易泄露的問題,瀏覽器或者操作系統在安裝時默認就會植入一些世界公認的可信任CA機構的證書(可以理解里面包含公鑰)或者是用戶自主導入的根證書(比如支付寶等金融機構會提示用戶安裝根證書的原因)。
  • 較為關鍵的步驟是數字簽名驗證階段,再拿到服務器給到的數字證書后,用內置的CA證書的公鑰去解密數字簽名,解密后拿到證書的明文內容,然后和服務器發送的數字證書的明文內容做比較(數字簽名=證書上的明文內容被私有加密后),如果發現不匹配,那證明證書可能被篡改過,則就會拒絕鏈接。
  • 當然驗證階段還有一些細節的驗證操作,比如:服務器返回的證書瀏覽器是否信任,如果不信任,交給用戶去選擇是否繼續。明文驗證等等。最關鍵的驗證還是數字簽名驗證階段
  • 步驟4客戶端根據服務器的算法生成一組隨機數(當做對稱加密的密鑰),然后用之前拿到的數字證書上(服務器返回的)的公鑰進行加密。
  • 步驟4.1和4.2用私鑰解密就拿到了與客戶端之間溝通的密鑰(對稱加密),之后的步驟4.3.2的請求報文和響應報文都采用這個密鑰進行加密 

HTTPS也可能帶來的安全問題

  非對稱加密問題2留了一個疑惑,不知道大家看完有沒有想到,“內置公鑰”是系統或瀏覽器直接默認內置的,這些內置的CA機構,上面也提到了“世界公認”比較出名的,如果想在這些出名的機構申請證書對與一些普通的網站來說需要花費昂貴的成本,而且有效期還較短,帶一個通配符*的一個域名,一年就要5000塊。那么隨着一些中小型網站的增多,也會有一些個人認證機構。不過一些網站因買不起合法的證書因此會自己制造一個根證書用於加密傳輸,這些當然就是不受信任的證書。訪問這種網站時,服務端就會發來一個根證書,讓用戶選擇是否信任。

  那么這種操作就給MITM帶來了可乘之機,假設MITM造假一個根證書,如果用戶信任了這個根證書。

       

 

 

  • 步驟3.3.1.1.2.2.2拿到了對稱密鑰這次的連接就基本完蛋了,他隨之可以解密之后的傳輸的報文。MITM讓客戶端和服務器互相都感覺不到異常。
  • 最重要的是跳過了數字簽名階段,MITM讓客戶端驗證了他自己申請的根證書,並把客戶端發出去的請求攔截后偽造后發給服務器,神不知鬼不覺的就攻擊成功了。
  • 假設客戶端沒有信任此證書,則數字簽名驗證這個階段就會失敗了。

小結

  看完這個問題,是不是覺得以后什么證書信息都不敢了信任了,其實也不是非得這樣說,假設你經常瀏覽某某個人網站,而且你很了解這個網站,那不必擔心。假設涉及到網銀、在線支付,或是一些知名的網站,這種公司性質的網站一定會申請合法的根證書,一旦發現根證書不受信任,果斷終止。不過一般的網民用戶也不會經常瀏覽那些個人網站或者小型網站,如果遇到要信任根證書時,就果斷拒絕掉吧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM