HTTP入門(七):確保Web安全的HTTPS
7.1HTTP的缺點
- 通訊使用明文(不加密),內容可能會被竊聽
- 不驗證通訊方的身份,因此有可能遭遇偽裝
- 無法證明報文的完整性,所以有可能已遭篡改
7.1.1 通訊使用明文可能會被竊聽
由於HTTP本身不具備加密的功能,所以也無法做到對通訊整體(使用HTTP協議通訊請求和響應的內容)進行加密。即,HTTP報文使用明文(指未加密的報文)進行加密
- TCP/IP是可能被竊聽的網路
按照TCP/IP協議族的工作機制,通訊內容在所有的通訊線路上都有可能遭到窺視。即使是已經加密處理的通訊,也會被窺視到通訊內容,這點和未加密的通訊是相同的。只是說如果經過加密,就有可能讓人無法破解報文資訊的含義,但加密處理後的報文資訊本身還是會被看到的。
- 加密處理防止被竊聽
防竊聽保護資訊的幾種對策中,最為普及的就是加密技術。
通訊的加密
和SSL(Secure Socket Layer,安全套接層)或者TLS(Transport Layer Security,安全傳輸層協議)的組合使用,加密HTTP的通訊內容。
用SSL建立安全通訊線路之後,就可以在這條路上進行HTTP通訊了。與SSL組合使用的HTTP被稱為HTTPS(HTTP Secure ,超文字傳輸安全協議)。
7.1.2 不驗證通訊方的身份就可能遭遇偽裝
HTTP協議中請求和響應不會對通訊方進行確認。也就是說存在“伺服器是否就是傳送請求中URI真正指定的主機,返回的響應是否真的返回到實際提出請求的客戶端”。
任何人都可發起請求
在HTTP協議通訊時,由於不存在確認通訊方的處理步驟,任何人都可以發起請求,另外,伺服器只要接收到請求,不管對方是誰都會返回一個響應(但也限於傳送端的IP地址和埠號沒有被Web伺服器設定限制訪問的前提下)
查明對手的證書
SSL不僅可以加密,還使用了一種被稱為證書的手段,可用於確定方。
證書由值得信賴的第三方機構頒發,用以證明伺服器和客戶端是實際存在的。偽造證書是異常困難的,所以只要能夠確認通訊方持有的證書,即可判斷通訊方的真實身份。
7.1.3無法驗證報文的完整性,可能已遭篡改
所謂完整性是指資訊的準確性。若無法證明其完整性,也就意味著無法證明其資訊是否準確。
接受到的內容可能有誤
沒有辦法確認,發出的請求/響應和接受到的請求/響應是前後相同的。
請求或響應在傳播途中,遭遇攻擊者攔截並篡改內容的攻擊稱為中間人攻擊(Man-in-the-Middle attack,MITM)
7.2 HTTP+加密+認證+完整性保護=HTTPS
經常在Web的登入頁面和購物結算介面等使用HTTPS通訊。
7.2.1HTTPS是身披SSL外殼的HTTP
HTTPS並非是應用層的一種新協議。只是HTTP通訊介面部分用SSL協議代替而已。
通常,HTTP直接和TCP通訊。當使用SSL時,則演變成先和SSL通訊,再由SSL和TCP通訊了。簡言之,所謂HTTPS,其實就是身披SSL外殼的HTTP。
在採用SSL後,HTTP就擁有了HTTPS的加密、證書和完整保護這些功能。
SSL是獨立於HTTP的協議,所以不光是HTTP協議,其他執行在應用層SMTP和Telnet等協議均可配合SSL協議使用。
7.2.2相互交換金鑰的公開金鑰加密技術
SSL採用一種叫做公開金鑰加密的加密處理方式。
共享金鑰加密的困境
加密和解密同用一個金鑰的方式稱為共享金鑰加密,也被稱為對稱金鑰加密。
問題在於:
- 已共享金鑰的方式進行加密,金鑰如何安全地轉交給對方。
- 如何安全地保管接受到的金鑰、
使用兩把金鑰的公開金鑰加密
公開金鑰加密使用一對非對稱的金鑰。一把叫做私有金鑰,另一把叫做公開金鑰。顧名思義,私有金鑰不能讓其他任何人知道,而公開金鑰則是可以隨意釋出,任何人都可以獲得。
HTTPS採用混合加密機制
HTTPS採用共享金鑰加密和公開金鑰加密並用的混合加密機制。
在交換金鑰環節使用公開金鑰加密,之後建立通訊交換報文階段則使用共享金鑰加密方式。
7.2.3HTTPS的安全通訊機制
HTTPS使用SSL(Secure Socket Layer)和TLS(Transport Layer Security)這兩個協議,TSL是以SSL為原型開發的協議,有時候統一稱該協議為SSL。
SSL速度
SSL慢分為兩種,一種是指通訊慢,二是指由於大量消耗CPU及記憶體等資源,導致處理速度變慢。
為什麼不一直使用HTTPS?
- 與純文字通訊相比,加密通訊會消耗更多的CPU及記憶體資源,特別是每當那些訪問量較多的Web網站進行加密處理時候,他們所承擔的負載不容小覷。因此,如果是非敏感資訊,則使用HTTP通訊,只有包含個人資訊等敏感資訊時,才利用HTTPS進行通訊。
- 節約購買數字證書的費用。