天天看點

了解 HTTPS,讀這篇文章就夠了

今天接到個活兒,讓我科普 HTTPS 。講 HTTP 我都“方”,想要通俗易懂的說完 HTTPS, 我有點“圓”。在講什麼是 HTTPS 之前,我們先來看個漫畫。

△ 圖檔來源于阮一峰的網絡日志

漫畫中其實就是 HTTPS 的握手過程,但是我相信大段的英文你看着也不怎麼流暢,下面就由我簡單講解下吧。HTTPS 是在 HTTP 的基礎上增加了 SSL 或 TLS 安全協定,這些協定有衆多的套件,這些套件則是由加密算法和雜湊演算法組成,而這些算法最後則涉及到了數學。數學是我上學時期最頭痛的學科,還記得上數學課時,我傳紙條給坐在我後面的班花……咦,好像有點跑偏了,拉回來,坐好了,開始我們的 HTTPS 之旅。

HTTPS 是什麼

HTTPS 是為了安全的使用 HTTP ,縮寫展開:Hyper Text Transfer Protocol over Secure Socket Layer 。從英文釋義可以看出,HTTPS 就是 HTTP + SSL 或者 HTTP + TLS 。

“我讀書少,你可不要騙我,上面的英文縮寫不是 HTTP over SSL 嗎?”呃...是這樣的,HTTPS 最初使用的加密協定的确是 SSL,SSL 最近的三個版本是:SSL 1.0 、SSL 2.0 、SSL 3.0 ,不過随着加密算法的發展和人們對傳輸安全性要求的提高,截止目前已經長江後浪推前浪依次推出了 TLS 的四個版本,分别是:TLS 1.0 、TLS 1.1 、TLS 1.2 以及前不久剛推出的 TLS 1.3 。實際上,業内也有人把 TLS 1.0 叫做 SSL 3.1 ,事實上,TLS 是在 SSL 的基礎上發展起來的更安全的加密協定。

為什麼要使用 HTTPS

這個問題要從為什麼逐漸的抛棄 HTTP 說起。HTTP 從 1991 年的 HTTP/0.9 一直發展到 1999 年的 HTTP/1.1 ,雖然功能不斷增加,性能也不斷提高,但是随着網際網路技術和網絡裝置的迅速普及,導緻資訊大爆炸,衆多的網民們對網絡傳輸的速度和安全性有了越來越高的要求。2012 年,谷歌推出了 SPDY 方案,優化了 HTTP/1.x 的請求延遲和安全性問題,進一步普及了 HTTPS,截止到 2015 年,HTTP/2 已經成為标準,更是進一步推動了全網 HTTPS 的程序。

全網 HTTPS 是大勢所趨,那麼為什麼抛棄 HTTP 呢?最重要的原因就是安全問題,因為 HTTP 是明文傳輸的,這對于目前從娃娃就開始玩智能手機,學習 python 程式設計的新一代來說,抓個包估計是不在話下,更别提浸淫網絡多年的“黑客”了。是時候跑步進入 HTTPS 加密時代的了。

HTTPS 為什麼安全

上文已經有提到,HTTPS 就是 HTTP + SSL or TLS ,除了 HTTPS 傳輸标準嚴格和規範外,主要是 SSL 或者 TLS 對傳輸的資訊有一整套的加解密和校驗方案。這套方案主要從下面三個方面確定傳輸的安全。

1. 身份認證

傳輸之前首先通過數字證書來确認身份,各大 CA 廠商幹的就是這個事情。這裡涉及到一個名詞:數字證書。數字證書分為公鑰和私鑰,CA 廠商會用自己的私鑰來給證書申請者簽發一套包含私鑰和公鑰的客戶證書,客戶的公鑰證書誰都可以擷取,裡面包含了客戶站點和證書的基本資訊,用來確定通路者通路的就是他想要通路的站點。

這個證書不可以僞造嗎?答案是真的不可以。

原因一:系統早已内置了各大 CA 廠商的公鑰來校驗證書是否是對應的站點的證書,如果不是,就會給出證書不比對的提示,除非你給别人的裝置強行植入假的 CA 公鑰。

原因二:這個證書是 CA 廠商通過哈希并加密得到的,基本無法逆向破解并僞造一個新的,除非是你黑進 CA 擷取了 CA 的私鑰,那這家 CA 也基本可以倒閉了。

2. 資料保密

資料保密包括對話秘鑰傳輸時候的保密和資料的加密傳送。

對話秘鑰:以 TLS 1.2 使用的套件之一 DHE-RSA-AES256-SHA256 為例:該套件是以 DHE 、RSA 作為秘鑰交換算法,這兩種秘鑰交換算法都是使用的非對稱加密,數學原理分别依賴于計算離散對數的難度和大數分解的難度。也就是在建立 HTTPS 連結的過程中,剛開始是有一些明文出現的,不過想要根據這些已知的明文推算出“對話秘鑰”卻非常困難。

對話加密:用戶端和和服務端協商并成功擷取到對話秘鑰後就開始用對話秘鑰進行對稱加密會話,上面的套件我們可以看到使用的是 AES256 加密算法。

那麼為什麼“對話秘鑰”的交換使用非對稱加密,正式對話資料的傳輸使用對稱加密?因為非對稱加密雖然安全性比較高,但是它的效率比較低,速度比較慢,是以我們一般隻使用它們來交換一下對話秘鑰,後面的對話加密則使用速度更快,效率更高的對稱加密。

3\. 資料完整

身份認證成功後,到了資料加密傳輸的階段,所有資料都以明文(HTTP)收發,隻不過收發的是加密後的明文。這時候也遇到了一個問題,雖然中間人很難破解加密後的資料,但是如果他對資料進行了篡改,那該怎麼辦?此時加密套件驗證資料一緻性的雜湊演算法就派上用場了,雜湊演算法有多種,比如 MD5 ,SHA1 或者 SHA2 等,上面舉例的加密套件使用的是 SHA2 中的 SHA256 來對資料進行哈希計算。這樣就使得任何的資料更改都會導緻通信雙方在校驗時發現問題,進而發出警報并采取相應的措施。

以上主要從使用 HTTPS 的必要性及 HTTPS 能安全傳輸的原理進行了簡單的闡述,HTTPS 的實作不僅僅是網絡技術的集中應用,底層還涉及到了大量的算法以及密碼學的衆多知識,小編也無法一下子概述完整(笑哭)。另外,不論是 PFS,或是國際網際網路組織正在推行的 HSTS 安全傳輸協定,他們的主要目的就是避免中間人攻擊,使資訊在傳輸過程中更安全,更快速。想要更詳細的了解 HTTPS 相關知識,我們在推薦閱讀裡準備了大量的 HTTPS 幹貨,歡迎查閱。

彩蛋:你是不是想吐槽一下标題說讀這篇就夠了,哈哈,你得允許我皮一下嘛~

推薦閱讀:

不是 HTTPS 拖慢網站速度,而是優化做的不夠優秀​ 

科普 TLS 1.3 — 新特性與開啟方式

從 HTTP 到 HTTPS 再到 HSTS