引言
認識 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
。