引言
認識 HTTPS
之前,先來講講 HTTP
存在的缺點:
- 使用明文,內容可能會被竊聽
- 不驗證通信方的身份,可能會遭遇僞裝
- 無法證明報文的完整性
在一些場景,使用 HTTP
沒有問題,但是在一些涉及到隱私、支付方面的問題的時候,我們就不能忽略 HTTP
存在的問題。而 HTTPS
的出現,就是爲了解決 HTTP
存在的問題,那麼什麼是 HTTPS
?
HTTPS = HTTP + 加密 + 認證 + 完整性保護
可以看出 HTTPS
是在 HTTP
的基礎上加了加密、認證、完整性保護。HTTPS
並不是一種新的協議,只是相比較 HTTP
,它的通信接口是由 SSL
(Secure Socket Layer
)和 TSL
(Transport Layer Security
)協議代替。這個過程會是這樣,HTTP
會先和 SSL
通信,然後 SSL
和 TCP
通信,所以HTTPS
又被稱爲身披 SSL
協議外殼的 HTTP
。
那麼,接下來我們看看 HTTPS
是如何完成加密、認證以及完整性保護。
混合加密機制
HTTPS
採用混合加密機制,即共享密鑰加密和公開密鑰加密兩者並用。
但是,一方面共享密鑰需要將加解密用的公鑰傳送給對方,但是如果在傳送的過程被劫持了公鑰會導致內容泄漏。另一方面,由於公開密鑰需要公開公鑰,如果有采用私鑰加密的信息,被其他人截取,則可以使用公開密鑰解密。
因此,HTTPS
結合兩種加密的優點,傳輸階段,使用公開密鑰加密的公鑰加密交換之後需要用於解密的共享密鑰的公鑰,解密階段,則用公開密鑰的私鑰解密出傳輸過來的共享密鑰的公鑰,然後用這個共享密鑰的公鑰進行進行解密。
數字簽名
HTTPS
通過數字簽名的方式來驗證數據報在傳輸過程中是否被篡改。
數字簽名使用的是公開密鑰加密技術。首先,由發送方通過 Hash
算法將要發送的數據生成消息摘要,然後使用發送者的公鑰加密生成數字簽名,再和數據一起發送給接收方。接收方接收到後,使用私鑰對數字簽名進行解密,然後將解密後的內容和傳送過來的數據進行對比,檢測數據是否遭到修改。
數字證書(CA認證)
其實,雖說混合加密機制可以防止通信被竊聽。但是,並不能驗證公開密鑰的真實性,即可能再傳輸過程中我們的公開密鑰已經被替換掉了。所以這個時候我們就需要使用由數字證書認證機構和其相關機關頒發的公開密鑰證數來確定公開密鑰的真實性。與此同時,這也確保了通信雙方的身份,因爲數字證數是客戶端和服務器雙方都可以信賴的。
數字證數認證機構的業務流程:
- 首先,我們需要向數字證書認證機構提出公開密鑰的申請
- 數字證書機構在認證申請者身份後,對申請的公開密鑰進行數字簽名,將簽名後的公開密鑰,放入到公開密鑰證書並綁定
- 服務器將數字證書認證機構頒發的公開證書發送到客戶端,從而進行公開密鑰加密方式的通信(此時的公開密鑰也被稱爲數字證書或證書)。
- 在之後的通信過程中,客戶端可以用證書的公鑰對服務器發送的證書進行驗證,驗證通過,則可以確認服務器的身份和公開密鑰的真實性。
總結
講了這麼多 HTTPS
的優點以及彌補了 HTTP
的不足。那麼,大家會想爲什麼我們現在大多數還是使用 HTTP
呢?因爲,和 HTTP
通信的簡單文本形式的傳輸,HTTPS
加密的通信方式會消耗更多的 CPU
和內存。如果,所有的通信都選擇 HTTPS
,那麼消耗的資源會成倍地增加,相應地能併發地請求的數量也會減少。所以,在很多情況下,只有涉及到敏感信息的通信時纔會使用 HTTPS
。