Google的一份網路上的 HTTPS 加密透明報告(資料截至2022年1月)中指出HTTPS 連線的普及率在過去幾年激增,網際網路上排名前 100 位的非 Google 網站HTTPS 使用情況為:97%的站點預設啟用HTTPS,100%的站點支援HTTPS。
Chrome 中的 HTTPS 瀏覽時間所佔的百分比(按平臺)
Chrome 中通過 HTTPS 載入的網頁所佔的百分比(按國家/地區)
如此流行的HTTPS我們應當對其有所瞭解,通過閱讀本文你可能能更進一步瞭解HTTPS相關的安全實現。
HTTPS(超文字傳輸安全協議)使用HTTP進行通訊,但利用SSL/TLS來加密資料包,所以它也有另外一種稱呼HTTP over TLS/SSL,說HTTPS安全其實說的就是TLS/SSL協議。HTTP以明文的方式在網路中交換資料,攻擊者可以輕易通過監聽或中間人攻擊等手段,獲取網站帳戶和敏感資訊等,而HTTPS可以做到如下幾個特性:
- 保密性。 客戶端的連線被加密,隱藏了 URL、cookie 和其他敏感後設資料。
- **真實性。 ** 確保客戶端正在與“真實”的服務端通訊,而非中間人。
- 準確性。 客戶端與服務端之間傳送的資料沒有被篡改。
保密性--對稱加密、非對稱加密
我們說http是明文傳輸,所以https首要解決的問題就是它的通訊加密,達到保密性。
對稱加密
對稱加密是最簡單、最常見的加密方式。
通訊雙方持有相同的金鑰key,加密和解密都是使用同一個金鑰。當客戶端要傳送資料時先用key對資料進行加密生成secret data,接著傳輸到服務端。服務端接收資料時,通過key將資料解密為data。反之客戶端接收資料也是如此。
這樣即使資料被截獲,由於不知道key資料也無法被解密。常見的對稱加密演算法有 DES、 AES 等。對稱加密速度快、效率高,能夠使用較小的計算量完成加密。
對稱加密有一個核心問題是如何在網際網路上傳輸金鑰?它不能像現實中一樣我打個車就過去你家把金鑰塞給你,萬一金鑰被截胡了不就白搭了。所以需要非對稱加密來解決這個問題。
非對稱加密
非對稱加密就是加密和解密使用兩個不同的金鑰,金鑰對包含一個公鑰(public key)和一個私鑰(private key)。其中公鑰只能用於加密,私鑰只用於解密。
首先客戶端請求服務端,服務端將自己的公鑰返回,客戶端拿到公鑰後就可以用它來加密要傳輸的資料data ,將加密資料secret data傳送到服務端後通過服務端的私鑰來解密,以此完成加密傳輸。
有了非對稱加密,只要我們將其中的data換成隨機碼key,這個key作為對稱加密中金鑰。金鑰傳輸問題就解決了,同時很好地利用了對稱加密的高效率。
如下所示:
這樣HTTPS中通訊的資料加密已經完成了。
一個http請求:
一個加密的https請求:
只要我們的私鑰不被破解,即使通訊被監聽也得不到其中的敏感加密資料。
真實性、準確性--數字證書、簽名
上面我們忽略了一個重要的問題,在通訊中如何保證所連線的服務端真實性呢?如下圖我們的通訊已經被中間人截胡了,client此時通訊物件為hacker。
在HTTPS中是如何防止這種中間人攻擊的呢?讓我們請出數字證書!
數字證書
所謂證書就是第三方(自簽證書沒有公證效應)頒發的認證,比如我們的學位證是由教育局頒發的一種學歷認證,由教育局來認證此人獲得了某個學位。同樣在HTTPS中存在一種認證機構即CA(Certification Authority),由它來證明你所連線的服務端就是你想要連線的server,即保證服務端真實性。
要獲取學位證你需要花錢上學、學習,而獲取數字證書你只需要花錢。
- 首先站點的所有者生成一個金鑰對,然後掏錢將站點的資訊如域名、組織資訊等以及公鑰提交給CA機構稽核,即證書籤名請求 (CSR)。
- CA機構稽核通過後,用它獨有的私鑰對CSR資訊(其實是CSR資訊的hash值,用於加速加、解密)進行加密,即形成數字簽名,用於驗證證書是否被篡改,經過簽名後一個完整的數字證書就成了其中包含站點資訊、數字簽名。
如下圖所示(圖源:what-is-a-certificate-authority):
ok,申請到了數字證書,給安裝到server中。
-
當client請求時server返回數字證書,先檢視證書認證的域名或所有者是誰?如果與你訪問的域名不一致毫無疑問你正遭受中間人攻擊,這是一個假站點請停止訪問。
-
如果一致,接著client檢視證書的簽發CA機構是誰?找到瀏覽器或作業系統中對應的內建CA公鑰,找不到?對不起,這個站點不安全(這其實也是壟斷和付費的根源),如果找到則使用公鑰解密簽名得到hash值和此時證書中CSR資訊的hash值做對比,如果一致,則這個證書沒有被修改,你訪問的站點很安全,取出證書中公鑰來做加密通訊吧。
如下圖所示:
HTTPS不保護的資訊?
-
雖然 HTTPS 對整個 HTTP 請求和響應進行加密,但 DNS 解析和連線監聽仍然可以獲得一些其他資訊,例如完整的域名或子域以及原始 IP 地址。
-
別有用心者還可能通過分析加密的 HTTPS 流量以獲取特殊資訊比如在網站上花費的時間,或使用者資料包相對大小。
攻擊 HTTPS 連線的有多難?
對 HTTPS 連線的攻擊通常分為 3 類:
- 通過密碼分析或其他協議的弱點破壞 HTTPS 連線的質量。
- 黑掉客戶端,將惡意根證書安裝到系統或瀏覽器信任庫中。
- 獲得瀏覽器信任的“流氓”證書,即通過操縱或破壞證書頒發機構。
以上是對HTTPS安全及其實現原理的學習,其中沒有提到TLS/SSL版本、加密演算法相關的內容,有興趣的可以自行檢索。
希望小作文對你有些許幫助,如果內容有誤請指正。
您可以隨意轉載、修改、釋出本文,無需經過本人同意。通過部落格閱讀:iqsing.github.io
參考: