計算機網絡 HTTP 與 HTTPS

端口

HTTP 的 URL 由 “http://” 起始且默認使用端口 80,HTTPS 的 URL 由 “https://” 起始且默認使用端口 443。

安全性和資源消耗

HTTP 協議運行在 TCP 之上,所有傳輸的內容都是明文,客戶端和服務器端都無法驗證對方的身份。

HTTPS 是運行在 SSL(安全套接層) / TLS(安全傳輸層協議) 之上的 HTTP 協議,SSL / TLS 運行在TCP之上。所有傳輸的內容都經過加密,加密採用對稱加密,但**對稱加密的密鑰用服務器方的證書進行了非對稱加密。**所以說,HTTP 安全性沒有 HTTPS 高,但是 HTTPS 比 HTTP 耗費更多服務器資源。

加密

  • 對稱加密:密鑰只有一個,加密解密爲同一個密碼,優點是加解密速度快,缺點是無法安全地將密鑰傳輸給通信方。典型的對稱加密算法有 DES、AES 等;
  • 非對稱加密:密鑰成對出現(且根據公鑰無法推知私鑰,根據私鑰也無法推知公鑰),加密解密使用不同密鑰(公鑰加密需要私鑰解密,私鑰加密需要公鑰解密)。優點是可以更安全地將公開密鑰傳輸給通信發送方,缺點是相對對稱加密速度較慢,典型的非對稱加密算法有 RSA、DSA 等。

HTTP 安全性問題

  • 使用明文進行通信,內容可能會被竊聽;
  • 不驗證通信方的身份,通信方的身份有可能遭遇僞裝;
  • 無法證明報文的完整性,報文有可能遭篡改。

HTTPS 並不是新協議,而是讓 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是說 HTTPS 使用了隧道進行通信。

通過使用 SSL,HTTPS 具有了加密(防竊聽)、認證(防僞裝)和完整性保護(防篡改)。

HTTPS 採用的加密方式

對稱密鑰加密方式的傳輸效率更高,但是無法安全地將密鑰 Secret Key 傳輸給通信方。而非對稱密鑰加密方式可以保證傳輸的安全性,因此可以利用非對稱密鑰加密方式將 Secret Key 傳輸給通信方。HTTPS 採用混合的加密機制,正是利用了上面提到的方案:

  • 使用非對稱密鑰加密方式,傳輸對稱密鑰加密方式所需要的 Secret Key,從而保證安全性;
  • 獲取到 Secret Key 後,再使用對稱密鑰加密方式進行通信,從而保證效率。(下圖中的 Session Key 就是 Secret Key)

認證

通過使用 證書 來對通信方進行認證。

公鑰是爲了解決祕鑰的配送問題,而證書是爲了解決公鑰的歸屬問題。

數字證書認證機構(CA,Certificate Authority)是客戶端與服務器雙方都可信賴的第三方機構。

服務器的運營人員向 CA 提出公開密鑰的申請,CA 在判明提出申請者的身份之後,會對已申請的公開密鑰做數字簽名,然後分配這個已簽名的公開密鑰,並將該公開密鑰放入公開密鑰證書後綁定在一起。

進行 HTTPS 通信時,服務器會把證書發送給客戶端。客戶端取得其中的公開密鑰之後,先使用數字簽名進行驗證,如果驗證通過,就可以開始通信了。

完整性保護

SSL 提供報文摘要功能來進行完整性保護。

HTTP 也提供了 MD5 報文摘要功能,但不是安全的。例如報文內容被篡改之後,同時重新計算 MD5 的值,通信接收方是無法意識到發生了篡改。

HTTPS 的報文摘要功能之所以安全,是因爲它結合了加密和認證這兩個操作。試想一下,加密之後的報文,遭到篡改之後,也很難重新計算報文摘要,因爲無法輕易獲取明文。

HTTPS 的缺點

  • 因爲需要進行加密解密等過程,因此速度會更慢;
  • 需要支付證書授權的高額費用。

參考鏈接

https://cyc2018.github.io/CS-Notes/#/notes/HTTP?id=%e5%85%ad%e3%80%81https

https://snailclimb.gitee.io/javaguide/#/docs/network/HTTPS%E4%B8%AD%E7%9A%84TLS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章