快速了解Https
- 2019 年 10 月 6 日
- 筆記
HTTPS簡介
HTTPS:https是http與ssl的結合,為了解決http明文傳輸導致信息泄露的問題。ssl通過公鑰和私鑰保證客戶端和服務器之間的通訊加密,由權威機構辦法的數字證書杜絕了中間人攻擊的可能。默認端口為443。
SSL需要到ca申請證書,一般免費證書較少,因而需要一定費用。(筆者一直用阿里雲,有個免費ssl申請,還是挺適合個人使用的。據說其他雲商也有免費ssl)
有關HTTP發展歷史和HTTP2的詳細講解,可以點擊查看這篇文章
有關HTTP連接中TCP握手揮手過程的詳細講解,可以點擊查看這篇文章
HTTPS工作流程

- client向server發送請求https://baidu.com,然後連接到server的443端口。
- 服務端必須要有一套數字證書,可以自己製作,也可以向組織申請。區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面,這套證書其實就是一對公鑰和私鑰。
- 傳送證書。這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發機構,過期時間、服務端的公鑰,第三方證書認證機構(CA)的簽名,服務端的域名信息等內容。
- 客戶端解析證書。這部分工作是由客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那麼就生成一個隨即值(秘鑰)。然後用證書對該隨機值進行加密。
- 傳送加密信息。這部分傳送的是用證書加密後的秘鑰,目的就是讓服務端得到這個秘鑰,以後客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了。
- 服務段加密信息。服務端用私鑰解密秘鑰,得到了客戶端傳過來的私鑰,然後把內容通過該值進行對稱加密。
- 傳輸加密後的信息。這部分信息是服務端用私鑰加密後的信息,可以在客戶端被還原。
- 客戶端解密信息。客戶端用之前生成的私鑰解密服務端傳過來的信息,於是獲取了解密後的內容。
相關名詞解釋
對稱加密算法(symmetric key algorithms)
在對稱加密算法中,加密使用的密鑰和解密使用的密鑰是相同的,因此對稱加密算法要保證安全性的話,密鑰要做好保密,只能讓使用的人知道,不能對外公開。對稱加密算法中,加密和解密都是使用同一個密鑰,不區分公鑰和私鑰。
密鑰,一般就是一個字符串或數字,在加密或者解密時傳遞給加密/解密算法。
非對稱加密算法(asymmetric key algorithms)
在非對稱加密算法中,加密使用的密鑰和解密使用的密鑰是不相同的。
注意:私鑰加密後的密文,只要是公鑰,都可以解密,但是反過來公鑰加密後的密文,只有私鑰可以解密。私鑰只有一個人有,而公鑰可以發給所有的人。
中間人攻擊
中間人攻擊(Man-in-the-MiddleAttack)是指,黑客攔截並篡改網絡中的通信數據。又分為被動MITM和主動MITM,被動MITM只竊取通信數據而不修改,而主動MITM不但能竊取數據,還會篡改通信數據。最常見的中間人攻擊常常發生在公共wifi或者公共路由上。
圖為客戶端主動發送消息時:

數字證書的安全傳輸
為了防止中間人攻擊,整個傳輸過程中亟需解決的是保證客戶端收到的公鑰是服務端發送的,為此提出了數字證書,數字證書是由權威的CA機構給服務端進行頒發,CA機構通過服務端提供的相關信息生成證書,證書內容包含了持有人的相關信息,公鑰,簽署者簽名信息等,最重要的是公鑰在數字證書中。數字證書是如何保證公鑰來自請求的服務器呢?數字證書上由持有人的相關信息,通過這點可以確定其不是一個中間人;但是證書也是可以偽造的,如何保證證書為真呢?一個證書中含有三個部分:"證書內容(F1), 加密算法(A),加密密文(F3') ",三者的關係如下圖,證書內容F1F會被散列算法SHA1計算出hash值F2,然後使用CA機構提供的私鑰進行RSA加密

當客戶端發起請求的時候,服務器將該數字證書發送給客戶端,客戶端將其中的加密密文(F3)通過CA機構提供的公鑰及逆行解密後得到F2,同時將證書內容(F1)使用SHA1散列成F2,如果兩者相等則說明證書沒問題。

由於劫持者不知道當初加密使用的私鑰是什麼,所以永遠無法偽造出一個正確的證書可以通過上述的驗證。

HTTP的使用成本
安全性考慮: HTTPS協議的加密範圍也比較有限,在黑客攻擊、拒絕服務攻擊、服務器劫持等方面幾乎起不到什麼作用。 SSL證書的信用鏈體系並不安全,特別是在某些國家可以控制CA根證書的情況下,中間人攻擊一樣可行。
成本考慮:
- SSL證書需要購買申請,功能越強大的證書費用越高
- SSL證書通常需要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗(SSL有擴展可以部分解決這個問題,但是比較麻煩,而且要求瀏覽器、操作系統支持,Windows XP就不支持這個擴展,考慮到XP的裝機量,這個特性幾乎沒用)。
- 根據ACM CoNEXT數據顯示,使用HTTPS協議會使頁面的加載時間延長近50%,增加10%到20%的耗電。
- HTTPS連接緩存不如HTTP高效,流量成本高。
- HTTPS連接服務器端資源佔用高很多,支持訪客多的網站需要投入更大的成本。
- HTTPS協議握手階段比較費時,對網站的響應速度有影響,影響用戶體驗。比較好的方式是採用分而治之,類似12306網站的主頁使用HTTP協議,有關於用戶信息等方面使用HTTPS。