端口
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