理解https中的安全及其實現原理

iqsing發表於2022-02-07

Google的一份網路上的 HTTPS 加密透明報告(資料截至2022年1月)中指出HTTPS 連線的普及率在過去幾年激增,網際網路上排名前 100 位的非 Google 網站HTTPS 使用情況為:97%的站點預設啟用HTTPS,100%的站點支援HTTPS。

Chrome 中的 HTTPS 瀏覽時間所佔的百分比(按平臺)

image-20220205144030761

Chrome 中通過 HTTPS 載入的網頁所佔的百分比(按國家/地區)

image-20220205144136067


如此流行的HTTPS我們應當對其有所瞭解,通過閱讀本文你可能能更進一步瞭解HTTPS相關的安全實現。

HTTPS(超文字傳輸安全協議)使用HTTP進行通訊,但利用SSL/TLS來加密資料包,所以它也有另外一種稱呼HTTP over TLS/SSL,說HTTPS安全其實說的就是TLS/SSL協議。HTTP以明文的方式在網路中交換資料,攻擊者可以輕易通過監聽或中間人攻擊等手段,獲取網站帳戶和敏感資訊等,而HTTPS可以做到如下幾個特性:

  • 保密性。 客戶端的連線被加密,隱藏了 URL、cookie 和其他敏感後設資料。
  • **真實性。 ** 確保客戶端正在與“真實”的服務端通訊,而非中間人。
  • 準確性。 客戶端與服務端之間傳送的資料沒有被篡改。

保密性--對稱加密、非對稱加密


我們說http是明文傳輸,所以https首要解決的問題就是它的通訊加密,達到保密性。

對稱加密

對稱加密是最簡單、最常見的加密方式。

image-20220205222244676

通訊雙方持有相同的金鑰key,加密和解密都是使用同一個金鑰。當客戶端要傳送資料時先用key對資料進行加密生成secret data,接著傳輸到服務端。服務端接收資料時,通過key將資料解密為data。反之客戶端接收資料也是如此。

這樣即使資料被截獲,由於不知道key資料也無法被解密。常見的對稱加密演算法有 DES、 AES 等。對稱加密速度快、效率高,能夠使用較小的計算量完成加密。

對稱加密有一個核心問題是如何在網際網路上傳輸金鑰?它不能像現實中一樣我打個車就過去你家把金鑰塞給你,萬一金鑰被截胡了不就白搭了。所以需要非對稱加密來解決這個問題。

非對稱加密

非對稱加密就是加密和解密使用兩個不同的金鑰,金鑰對包含一個公鑰(public key)和一個私鑰(private key)。其中公鑰只能用於加密,私鑰只用於解密。

image-20220205214218879

首先客戶端請求服務端,服務端將自己的公鑰返回,客戶端拿到公鑰後就可以用它來加密要傳輸的資料data ,將加密資料secret data傳送到服務端後通過服務端的私鑰來解密,以此完成加密傳輸。

有了非對稱加密,只要我們將其中的data換成隨機碼key,這個key作為對稱加密中金鑰。金鑰傳輸問題就解決了,同時很好地利用了對稱加密的高效率。

如下所示:

image-20220205222743133

這樣HTTPS中通訊的資料加密已經完成了。

一個http請求:

with-http-headers

一個加密的https請求:

with-https-headers-secret

只要我們的私鑰不被破解,即使通訊被監聽也得不到其中的敏感加密資料。

真實性、準確性--數字證書、簽名


上面我們忽略了一個重要的問題,在通訊中如何保證所連線的服務端真實性呢?如下圖我們的通訊已經被中間人截胡了,client此時通訊物件為hacker。

image-20220206092643558

在HTTPS中是如何防止這種中間人攻擊的呢?讓我們請出數字證書!

數字證書

所謂證書就是第三方(自簽證書沒有公證效應)頒發的認證,比如我們的學位證是由教育局頒發的一種學歷認證,由教育局來認證此人獲得了某個學位。同樣在HTTPS中存在一種認證機構即CA(Certification Authority),由它來證明你所連線的服務端就是你想要連線的server,即保證服務端真實性。

要獲取學位證你需要花錢上學、學習,而獲取數字證書你只需要花錢。

  1. 首先站點的所有者生成一個金鑰對,然後掏錢將站點的資訊如域名、組織資訊等以及公鑰提交給CA機構稽核,即證書籤名請求 (CSR)
  2. CA機構稽核通過後,用它獨有的私鑰對CSR資訊(其實是CSR資訊的hash值,用於加速加、解密)進行加密,即形成數字簽名,用於驗證證書是否被篡改,經過簽名後一個完整的數字證書就成了其中包含站點資訊、數字簽名。

如下圖所示(圖源:what-is-a-certificate-authority):

證書頒發機構如何驗證證書?

ok,申請到了數字證書,給安裝到server中。

  • 當client請求時server返回數字證書,先檢視證書認證的域名或所有者是誰?如果與你訪問的域名不一致毫無疑問你正遭受中間人攻擊,這是一個假站點請停止訪問。

  • 如果一致,接著client檢視證書的簽發CA機構是誰?找到瀏覽器或作業系統中對應的內建CA公鑰,找不到?對不起,這個站點不安全(這其實也是壟斷和付費的根源),如果找到則使用公鑰解密簽名得到hash值和此時證書中CSR資訊的hash值做對比,如果一致,則這個證書沒有被修改,你訪問的站點很安全,取出證書中公鑰來做加密通訊吧。

如下圖所示:

image-20220206223630425

HTTPS不保護的資訊?


  • 雖然 HTTPS 對整個 HTTP 請求和響應進行加密,但 DNS 解析和連線監聽仍然可以獲得一些其他資訊,例如完整的域名或子域以及原始 IP 地址。

  • 別有用心者還可能通過分析加密的 HTTPS 流量以獲取特殊資訊比如在網站上花費的時間,或使用者資料包相對大小。

攻擊 HTTPS 連線的有多難?


對 HTTPS 連線的攻擊通常分為 3 類:

  • 通過密碼分析或其他協議的弱點破壞 HTTPS 連線的質量。
  • 黑掉客戶端,將惡意根證書安裝到系統或瀏覽器信任庫中。
  • 獲得瀏覽器信任的“流氓”證書,即通過操縱或破壞證書頒發機構。

以上是對HTTPS安全及其實現原理的學習,其中沒有提到TLS/SSL版本、加密演算法相關的內容,有興趣的可以自行檢索。

希望小作文對你有些許幫助,如果內容有誤請指正。

您可以隨意轉載、修改、釋出本文,無需經過本人同意。通過部落格閱讀iqsing.github.io

參考:

what-is-a-certificate-authority

The HTTPS-Only Standard

相關文章