圖解HTTP總結(7)——確保Web安全的HTTPS
通訊使用明文( 不加密) , 內容可能會被竊聽。
不驗證通訊方的身份, 因此有可能遭遇偽裝。
無法證明報文的完整性, 所以有可能已遭篡改。
我們把添加了加密及認證機制的 HTTP 稱為 HTTPS(HTTP Secure)。
HTTPS 是身披 SSL 外殼的 HTTP
HTTPS 並非是應用層的一種新協議。 只是 HTTP 通訊介面部分用
通常HTTP直接和TCP通訊。當使用SSL時,則演變成先和SSL通訊,再由SSL和TCP通訊了。
SSL是獨立於 HTTP 的協議, 所以不光是 HTTP 協議, 其他執行在應用層的 SMTP 和 Telnet 等協議均可配合 SSL協議使用。 可以說
SSL採用一種叫做公開金鑰加密(Public-key cryptography)的加密處理方式。
近代的加密方法中加密演算法是公開的, 而金鑰卻是保密的。 通過這種方式得以保持加密方法的安全性。
加密和解密都會用到金鑰。 沒有金鑰就無法對密碼解密, 反過來說,任何人只要持有金鑰就能解密了。 如果金鑰被攻擊者獲得, 那加密也就失去了意義。
共享祕鑰加密的困境
加密和解密同用一個金鑰的方式稱為共享金鑰加密(
以共享金鑰方式加密時必須將金鑰也發給對方。 可究竟怎樣才能安全地轉交? 在網際網路上轉發金鑰時, 如果通訊被監聽那麼金鑰就可會落入攻擊者之手, 同時也就失去了加密的意義。 另外還得設法安全地保管接收到的金鑰。
使用兩把金鑰的公開金鑰加密
公開金鑰加密方式很好地解決了共享金鑰加密的困難。公開金鑰加密使用一對非對稱的金鑰。一把叫做私有金鑰(private key),另一把叫做公開金鑰(public key)。顧名思義,私有金鑰不能讓其他任何人知道, 而公開金鑰則可以隨意釋出, 任何人都可以獲得。
使用公開金鑰加密方式, 傳送密文的一方使用對方的公開金鑰進行加密處理, 對方收到被加密的資訊後, 再使用自己的私有密鑰進行解密。 利用這種方式, 不需要傳送用來解密的私有金鑰, 也不必擔心金鑰被攻擊者竊聽而盜走。
HTTPS 採用混合加密機制HTTPS 採用共享金鑰加密和公開金鑰加密兩者並用的混合加密機制。 若金鑰能夠實現安全交換, 那麼有可能會考慮僅使用公開金鑰加密來通訊。 但是公開金鑰加密與共享金鑰加密相比, 其處理速度要慢。 在交換金鑰環節使用公開金鑰加密方式, 之後的建立通訊交換報文階段則使用共享金鑰加密方式。
為什麼不一直使用 HTTPS
既然 HTTPS 那麼安全可靠, 那為何所有的 Web 網站不一直使用HTTPS ?
其中一個原因是, 因為與純文字通訊相比, 加密通訊會消耗更多的CPU 及記憶體資源。 如果每次通訊都加密, 會消耗相當多的資源, 平攤到一臺計算機上時, 能夠處理的請求數量必定也會隨之減少。
因此, 如果是非敏感資訊則使用 HTTP 通訊, 只有在包含個人資訊等敏感資料時, 才利用 HTTPS 加密通訊。