確保Web安全的HTTPS
HTTP的缺點
HTTP主要有這些不足
- 通訊使用明文(不加密),內容可能會被竊聽
- 不驗證通訊方的身份,因此可能遭遇偽裝
- 無法證明報文的完整性,所以有可能已遭篡改
除此之外,HTTP 本身還有很多缺點。而且,還有像某些特定的 Web 伺服器和特定的 Web 瀏覽器在實際應 用中存在的不足(也可以說成是脆弱性或安全漏洞),另外,用 Java 和 PHP 等程式語言開發的 Web 應用也 可能存在安全漏洞。
通訊使用明文可能會被竊聽
- TCP/IP是可能被竊聽的網路
- 加密處理防止被竊聽
通訊的加密
種方式就是將通訊加密。HTTP 協議中沒有加密機制,但可以通過和 SSL(Secure Socket Layer,安 全套接層)或 TLS(Transport Layer Security,安全層傳輸協議)的組合使用,加密 HTTP 的通訊內 容。
用 SSL 建立安全通訊線路之後,就可以在這條線路上進行 HTTP 通訊了。與 SSL 組合使用的 HTTP 被稱為 HTTPS
內容的加密
不驗證通訊方的身份就可能遭遇偽裝
- 任何人都可發起請求
在 HTTP 協議通訊時,由於不存在確認通訊方的處理步驟,任何人都可以發起請求。另外,伺服器只要 接收到請求,不管對方是誰都會返回一個響應(但也僅限於傳送端的 IP 地址和埠號沒有被 Web 服務 器設定限制訪問的前提下)。
- 查明對手的證照
雖然使用 HTTP 協議無法確定通訊方,但如果使用 SSL 則可以。SSL 不僅提供加密處理,而且還使用 了一種被稱為證照的手段,
可用於確定方。 證照由值得信任的第三方機構頒發,用以證明伺服器和客戶端是實際存在的。另外,偽造證照從技術角 度來說是異常困難的一件事。所以只要能夠確認通訊方(伺服器或客戶端)持有的證照,即可判斷通訊 方的真實意圖。
無法證明報文完整性,可能已遭篡改
為了有效防止這些弊端,有必要使用 HTTPS。SSL 提供認證和加密處理及摘要功能。僅靠 HTTP 確保 完整性是非常困難的,因此通過和其他協議組合使用來實現這個目標
HTTP+加密+認證+完整性保護=HTTPS
HTTPS是身披SSL外殼的HTTP
HTTPS 並非是應用層的一種新協議。只是 HTTP 通訊介面部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)協議代替而已。
通常,HTTP 直接和 TCP 通訊。當使用 SSL 時,則演變成先和 SSL 通訊,再由 SSL 和 TCP 通訊了。簡言 之,所謂 HTTPS,其實就是身披 SSL 協議這層外殼的 HTTP。
相互交換金鑰的公開金鑰加密技術
SSL 採用一種叫做公開金鑰加密(Public-key cryptography)的加密處理方式。 近代的加密方法中加密演算法是公開的,而金鑰卻是保密的。通過這種方式得以保持加密方法的安全性。
加密和解密都會用到金鑰。沒有金鑰就無法對密碼解密,反過來說,任何人只要持有金鑰就能解密了。如果 金鑰被攻擊者獲得,那加密也就失去了意義。
- 共享祕鑰加密的困境
- 使用兩把金鑰的公開金鑰加密
公開金鑰加密使用一對非對稱的金鑰。一把叫做私有金鑰(private key),另一把叫做公開金鑰(public key)。顧名思義,私有金鑰不能讓其他任何人知道,而公開金鑰則可以隨意釋出,任何人都可以獲得
- HTTPS採用混合加密機制
HTTPS 採用共享金鑰加密和公開金鑰加密兩者並用的混合加密機制。若金鑰能夠實現安全交換,那麼有 可能會考慮僅使用公開金鑰加密來通訊。但是公開金鑰加密與共享金鑰加密相比,其處理速度要慢。 所以應充分利用兩者各自的優勢,將多種方法組合起來用於通訊。在交換金鑰環節使用公開金鑰加密方 式,之後的建立通訊交換報文階段則使用共享金鑰加密方式。
證明公開金鑰正確性的
- 可證明組織真實性的 EV SSL
- 用以確認客戶端的客戶端證照
- 認證機構信譽
- 由自認證機構頒發的證照稱為自簽名
HTTPS的安全通訊機制
步驟 1: 客戶端通過傳送 Client Hello 報文開始 SSL 通訊。報文中包含客戶端支援的 SSL 的指定版本、加密 元件(Cipher Suite)列表(所使用的加密演算法及金鑰長度等)。步驟 2: 伺服器可進行 SSL 通訊時,會以 Server Hello 報文作為應答。和客戶端一樣,在報文中包含 SSL 版本以及加密元件。伺服器的加密元件內容是從接收到的客戶端加密元件內篩選出來的。
步驟 3: 之後伺服器傳送 Certificate 報文。報文中包含公開金鑰證
步驟 4: 最後伺服器傳送 Server Hello Done 報文通知客戶端,最初階段的 SSL 握手協商部分結束。
步驟 5: SSL 第一次握手結束之後,客戶端以 Client Key Exchange 報文作為迴應。報文中包含通訊加密中 使用的一種被稱為 Pre-master secret 的隨機密碼串。該報文已用步驟 3 中的公開金鑰進行加密。
步驟 6: 接著客戶端繼續傳送 Change Cipher Spec 報文。該報文會提示伺服器,在此報文之後的通訊會採 用 Pre-master secret 金鑰加密。
步驟 7: 客戶端傳送 Finished 報文。該報文包含連線至今全部報文的整體校驗值。這次握手協商是否能夠成 功,要以伺服器是否能夠正確解密該報文作為判定標準。
步驟 8: 伺服器同樣傳送 Change Cipher Spec 報文
步驟 9: 伺服器同樣傳送 Finished 報文。
步驟 10: 伺服器和客戶端的 Finished 報文交換完畢之後,SSL 連線就算建立完成。當然,通訊會受到 SSL 的保護。從此處開始進行應用層協議的通訊,即傳送 HTTP 請求。
步驟 11: 應用層協議通訊,即傳送 HTTP 響應。
步驟 12: 最後由客戶端斷開連線。斷開連線時,傳送 close_notify 報文。上圖做了一些省略,這步之後再發 送 TCP FIN 報文來關閉與 TCP 的通訊。
在以上流程中,應用層傳送資料時會附加一種叫做 MAC(Message Authentication Code)的報文摘要。 MAC 能夠查知報文是否遭到篡改,從而保護報文的完整性。
SSL 的慢分兩種。一種是指通訊慢。另一種是指由於大量消耗 CPU 及記憶體等資源,導致處理速度變 慢。
和使用 HTTP 相比,網路負載可能會變慢 2 到 100 倍。除去和 TCP 連線、傳送 HTTP 請求 • 響應以 外,還必須進行 SSL 通訊,因此整體上處理通訊量不可避免會增加。
另一點是 SSL 必須進行加密處理。在伺服器和客戶端都需要進行加密和解密的運算處理。因此從結果上 講,比起 HTTP 會更多地消耗伺服器和客戶端的硬體資源,導致負載增強。