1. 程式人生 > 實用技巧 >HTTPS原理剖析

HTTPS原理剖析

一。HTTP隱患

客戶端向伺服器傳送HTTP請求,伺服器收到請求後返回響應給客戶端:


抓包如圖:

我們可以發現:HTTP報文明文傳輸(而TCP/IP是可能被竊聽的網路);且客戶端跟伺服器之間沒有任何身份的確認;
假如黑客截獲客戶端發給伺服器的資訊,並造假資料返回給客戶端。客戶端是無感知的。所以HTTP請求存在如下風險:

(1)竊聽風險:第三方可以獲知通訊內容。

(2)篡改風險:第三方可以修改通訊內容。

(3)冒充風險:第三方可以冒充他人身份參與通訊。

二。加密演算法簡介

在講HTTPS前先了解下常見的加密演算法~

  1. 對稱加密演算法(DES、3DES、AES)
    生成一個金鑰key,加密解密都是這個key。
  2. 非對稱加密演算法(RSA、DSA)

    生成一個公鑰P-key,一個私鑰S-Key。公鑰加密,私鑰解密。也可以私鑰加密,公鑰解密。

  3. 雜湊演算法(md5,sha-1..)

    固定的內容能通過雜湊演算法生成生成一段特定長度的唯一的Hash值。內容一旦變更,生成的hash值也會變更。

  4. 數字簽名

    簽名就是在資訊的後面再加上一段內容(資訊經過hash後的值),可以證明資訊沒有被修改過。hash值一般都會加密後(也就是簽名)再和資訊一起傳送,以保證這個hash值不被修改。

三。HTTP向HTTPS演化過程

防止竊聽,通訊內容加密

為了防止被竊聽,研究人員開始嘗試對通訊內容本身加密,即HTTP報文加密後再發送請求,這樣的話就需要客戶端跟伺服器同時具備加密解密功能。

  1. 對稱加密演算法加密

    金鑰由一方產生,傳給另一方。此後兩端的傳輸就通過金鑰加密傳輸。解決了資料的裸奔狀況。但是金鑰的傳輸是銘文傳輸,所以還是有問題。

    優點:

    使用key對傳輸資料加密。黑客不曉得這個key的話,就無法解密傳輸資料。

    漏洞:

    (1)金鑰如何傳輸,傳輸過程很有可能被劫持。金鑰一旦洩露。上述隱患照樣發生。

    (2)不同的客戶端,伺服器。雙方都需要維護大量的金鑰,維護成本太高

  2. 對稱加密不合適後,想到了採用非對稱加密演算法加密。

    首先伺服器將公鑰傳送給瀏覽器。瀏覽器向伺服器傳資料就用公鑰加密,伺服器用私鑰解密。伺服器向客戶端傳輸資料採用私鑰加密,客戶端用公鑰解密。這就有問題了,公鑰匙公開的,黑客竊取公鑰後,也能對伺服器向客戶端傳輸的資料解密查看了。

    優點:

    (1)客戶端持有公鑰,伺服器持有私鑰。相對對稱加密降低維護成本。
    缺點:
    (1)公鑰是公開的,黑客可以拿到公鑰。所以伺服器傳給客戶端的私鑰加密的資料(第4步)。黑客可以劫持並解密服務端傳給客戶端的資料。

  3. 那採用非對稱+對稱呢?

    伺服器有一對非對稱金鑰(公鑰key1和私鑰key1_1),公鑰傳送給客戶端。

    客戶端有一對對成金鑰key2,金鑰通過公鑰加密傳給伺服器。只能伺服器通過私鑰解密獲取到這個對稱金鑰。

    之後的資料傳輸都採用對稱加密。


    優點:
    (1)節省了金鑰的維護成本。
    (2)保證了對稱金鑰不會被第三方拿到。保證了資料不會洩露。

防止篡改,數字簽名解決

檔案通過hash演算法拿到hash值,稱為摘要。再使用私鑰對hash值加密,生成數字簽名。伺服器將數字簽名跟檔案放一起,發給客戶端。

客戶端收到後,先使用公鑰解密簽名,拿到摘要。證明了是伺服器發的。如果再將檔案通過hash加密得到的hash值跟摘要做對比,相等則說明檔案沒有被篡改。

防止冒充,公鑰證書來解決

只對內容加密無法防止第三方攻擊
加密演算法雖然保證了資料傳輸過程加密。忽略了伺服器向客戶端傳輸公鑰這步。伺服器傳輸公鑰是明文傳輸。如果黑客擷取到公鑰key1。他就可以用自己的非對稱金鑰key3,代替key1 傳給客戶端。客戶端無感知,就會用key3去加密傳輸,黑客用自己的私鑰key3_3解密。然後用key1加密偽造資料傳給伺服器。。。就是說黑客完全控制了整個傳輸過程。
總結:加密內容的基礎上,被冒充的根本原因,是客戶端無法判斷他拿到的公鑰是伺服器的,還是第三方的。這就需要一個公鑰證書來證明公鑰的真實性。

  1. 什麼是公鑰證書(數字證書/證書)
    即證明公開祕鑰的證書。
    公鑰證書是由值得信任的第三方數字證書認證機構(CA)和其他相關機關頒發,用以證明伺服器和客戶端是實際存在的。偽造證書從技術角度來說是異常困難的一件事。所以只要能夠確定通訊方(伺服器和客戶端)持有的證書,即可判斷通訊方的身份。客戶端傳送https的請求時會先從伺服器下載證書,然後客戶端會自動驗證證書的真實性

2. 數字簽名

這裡CA機構的數字簽名跟認證,就是上文說的防止篡改提到的數字簽名解決解決思路。只不過上文保證的是檔案沒有被篡改。這裡CA機構保證的是公鑰的合法性跟公鑰沒被篡改。

3. 證書都有啥,可以點選瀏覽器網址欄前的鎖,檢視證書詳情。

四。HTTPS的原理

說了這麼多,那到底什麼是HTTPS呢?

HTTPS 其實就是HTTP+SSL(安全套接字層)/TLS(傳輸層安全),即 HTTP 下加入 SSL 層。網際網路的通訊安全,建立在SSL/TLS協議之上,而SSL/TLS協議的基本思路是採用公鑰加密法,簡單來說就是,客戶端先向伺服器端索要公鑰,然後用公鑰加密資訊,伺服器收到密文後,用自己的私鑰解密。

HTTP+加密+認證+完整性保護=HTTPS

通訊內容混合加密+使用數字證書=SSL

SSL/TLS協議

上述加密過程的完善+證書的結合,就形成了目前的SSL/TLS協議。

SSL協議大概的流程是:

SSL的優勢(HTTPS的優勢):

(1) 所有資訊都是加密傳播,第三方無法竊聽。

(2) 具有校驗機制,一旦被篡改,通訊雙方會立刻發現。

(3) 配備身份證書,防止身份被冒充。

五。總結之HTTP跟HTTPS的區別

    1. HTTP是無狀態的;HTTPS協議是由SSL/TLS+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。

    2. HTTPS需要一定費用,證書很少免費。

    3. http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
    4. https請求沒有HTTP請求快。因為SSL通訊慢且會大量消耗cpu和記憶體資源導致處理速度慢。