在 HTTP 協定中有可能存在資訊竊聽或身份僞裝等安全問題。使用HTTPS 通信機制可以有效地防止這些問題。
HTTP 的缺點:
缺點一:通信使用明文(不加密),内容可能會被竊聽
由于 HTTP 本身不具備加密的功能,是以也無法做到對通信整體(使用 HTTP 協定通信的請求和響應的内容)進行加密。即,HTTP 封包使用明文(指未經過加密的封包)方式發送。
TCP/IP 是可能被竊聽的網絡 網際網路上的任何角落都存在通信内容被竊聽的風險
加密處理防止被竊聽
通信的加密 SSL(Secure Socket Layer,安全套接層)TLS(Transport Layer Security,安全層傳輸協定)用 SSL 建立安全通信線路之後,就可以在這條線路上進行 HTTP通信了。與 SSL 組合使用的 HTTP 被稱為 HTTPS(HTTP Secure,超文本傳輸安全協定)或 HTTP over SSL。
内容的加密 把HTTP 封包裡所含的内容進行加密處理。
缺點二:不驗證通信方的身份,是以有可能遭遇僞裝
任何人都可發起請求
- 無法确定請求發送至目标的 Web 伺服器是否是按真實意圖傳回響應的那台伺服器。有可能是已僞裝的 Web 伺服器。
- 無法确定響應傳回到的用戶端是否是按真實意圖接收響應的那個用戶端。有可能是已僞裝的用戶端。
- 無法确定正在通信的對方是否具備通路權限。因為某些Web 伺服器上儲存着重要的資訊,隻想發給特定使用者通信的權限。
- 無法判定請求是來自何方、出自誰手。
- 即使是無意義的請求也會照單全收。無法阻止海量請求下的 DoS 攻擊(Denial of Service,拒絕服務攻擊)。
查明對手的證書
缺點三:無法證明封包的完整性,是以有可能已遭篡改
所謂完整性是指資訊的準确度。若無法證明其完整性,通常也就意味着無法判斷資訊是否準确。
接收到的内容可能有誤 中間人攻擊(Man-in-the-Middle attack,MITM)
如何防止篡改 MD5和SHA-1
HTTP + 加密 + 認證 + 完整性保護 = HTTPS
1、HTTP 加上加密處理和認證以及完整性保護後即是HTTPS
2、HTTPS 是身披 SSL 外殼的 HTTP
3、互相交換密鑰的公開密鑰加密技術
共享密鑰加密的困境:解密和加密用同一個密鑰 對稱密鑰加密
使用兩把密鑰的公開密鑰加密:公開密鑰加密 私有密鑰解密
HTTPS采用混合加密機制:采用共享密鑰加密和公開密鑰加密兩者并用的混合加密機制。
4、證明公開密鑰正确性的證書
數字證書認證機構CA 威瑞信VeriSign
- 可證明組織真實性的EV SSL證書
- 用以确認用戶端的用戶端證書
- 認證機構信譽第一
- 由自認證機構頒發的證書稱為自簽名證書
5、HTTPS 的安全通信機制
1)、用戶端通過發送Client Hello封包開始SSL通信
2)、伺服器可進行SSL通信時,會以Server Hello封包作為應答
3)、伺服器發送Certificate封包,公開密鑰證書
4)、伺服器發送Server Hello Done封包到用戶端,最初SSL握手結束
5)、用戶端以Client Key Exchange封包(被第三步中公開密鑰加密)作為回應 Pre-master secret
6)、用戶端發送Change Cipher Spec封包後,以後的封包用Pre-master secret密鑰加密
7)、用戶端發送Finished封包 連接配接至今全部封包驗證正确性
8)、伺服器發送Change Cipher Spec封包
9)、伺服器發送Finished封包
10)、務器和用戶端的 Finished 封包交換完畢之後,SSL連接配接建立完成。從此處開始進行應用層協定的通信,即發送 HTTP 請求
11)、應用層協定通信,即發送 HTTP 響應
12)、最後由用戶端斷開連接配接。斷開連接配接時,發送 close_notify 封包。
在以上流程中,應用層發送資料時會附加一種叫做 MAC(Message Authentication Code)的封包摘要。MAC 能夠查知封包是否遭到篡改,進而保護封包的完整性。
HTTPS 使用 SSL(Secure Socket Layer) 和 TLS(Transport Layer Security)這兩個協定。
SSL 的慢分兩種。一種是指通信慢。另一種是指由于大量消耗CPU 及記憶體等資源,導緻處理速度變慢。
為什麼不一直使用 HTTPS?
其中一個原因是,因為與純文字通信相比,加密通信會消耗更多的CPU 及記憶體資源。如果每次通信都加密,會消耗相當多的資源,平攤到一台計算機上時,能夠處理的請求數量必定也會随之減少。
是以,如果是非敏感資訊則使用 HTTP 通信,隻有在包含個人資訊等敏感資料時,才利用 HTTPS 加密通信。
想要節約購買證書的開銷也是原因之一。
要進行 HTTPS 通信,證書是必不可少的。而使用的證書必須向認證機構(CA)購買。證書價格可能會根據不同的認證機構略有不同。通常,一年的授權需要數萬日元(現在一萬日元大約折合 600人民币)。
那些購買證書并不合算的服務以及一些個人網站,可能隻會選擇采用 HTTP 的通信方式。