HTTPS協議入門
HTTPS協議入門
1. HTTPS出現的背景
雖然HTPP協議很優秀並且方便,但是不得不正視HTTP協議存在的一些問題:
- 通訊使用明文(不加密),內容可能會被竊聽;
- 不驗證通訊雙方的身份,因此有可能遭遇偽裝;
- 無法證明報文的完整性,所以有可能已遭篡改;
這些問題不僅在HTTP協議上出現,其他未加密的協議中也會存在這類問題。
由於這些問題的存在,HTTPS協議就應運而生,HTTPS,超文字傳輸安全協議,是和SSL(Secure Socket Layer,安全套接層)或者TLS(Transport Layer Security,安全傳輸層協議)組合使用的,通常HTTP直接和TCP通訊,當使用SSL時,則演變成先和SSL通訊,再由SSL和TCP通訊了。
2. HTTPS的三大功能
上面提到了HTPP協議的不足,下面說一下HTTPS是如何解決這三個問題的。
2.1 通訊使用明文(不加密),內容可能會被竊聽
在網路上傳輸資訊,本身就是可以被他人截獲的,比如通過抓包工具,第三者就可以在同區域網的一臺主機,或者路由器或者網際網路的任何地方都可能被截獲資料。HTPP使用明文傳輸,相當於你傳輸的資料完全暴露在了網路上。
HTTPS傳輸資料的時候會對通訊進行加密,使用SSL建立安全線路之後,就可以在這條線路上進行HTTP通訊了。相當於單獨建立了一條安全通道。
2.2 不驗證通訊雙方的身份,因此有可能遭遇偽裝
HTTP協議中的請求和響應不會對通訊雙方進行確認,也就是說存在“伺服器是否就是傳送請求中URI真正的主機,返回的響應是否是真的返回到實際提出請求的客戶端”等類似問題。並且,由於不存在通訊雙方的處理步驟,任何人都可以發起請求。可能會出現DOS攻擊等問題。
HTTPS中SSL就可以確認確認通訊方,它提供了一種被稱為證書的手段,證書由值得信賴的第三方機構頒發,用以證明伺服器和客戶端是實際存在的,另外偽造證書從技術角度說是異常困難的一件事,所以只要能確認通訊方持有的證書就可以判斷通訊方的真實意圖。
2.3 無法證明報文的完整性,所以有可能已遭篡改
HTTP協議無法確認客戶端發出的請求和服務端接收到的請求是相同的,同樣,也無法確認服務端傳送的響應和客戶端接收的響應是相同的。很容易出現中間人攻擊。
雖然HTTP協議可以使用md5等資訊摘要演算法保證資料完整性,但是MD5本身都可能被篡改,也就無法保證其安全性。SSL提供了摘要功能。可以保證資料的完整性。
從HTTPS的功能來看,可以總結為:HTTP+加密+認證+完整性保護=HTTPS。
3. HTTPS的混合加密機制
首先先來談談兩種加密方法:
- 共享金鑰加密:加密和解密使用相同的金鑰,但是在通訊的時候需要把金鑰也一併傳送,這樣有可能被別人截獲;
- 公開金鑰加密:加密和解密使用不同的金鑰,伺服器提供公開金鑰,客戶端使用公開金鑰對資料進行加密,然後伺服器使用私有金鑰對密文進行解密,這樣就保證密文不會被破解。
但是使用公開金鑰加密方式傳輸資料比較慢,所以HTTPS結合了兩者的優點,使用混合加密機制,首先在交換金鑰的時候使用公開金鑰加密方式,確認連線後,傳輸資料使用共享金鑰加密方式。
4. HTTPS使用場景
當使用HTTPS時,通訊會變慢,導致通訊變慢的原因有兩個,一是網路負載,當使用HTTPS進行通訊時,網路負載比HTTP要高2-100倍。而是由於HTTPS每次通訊都要加解密,對CPU的消耗也很大。所以一般只有在傳輸機密資訊時使用HTTPS,比如使用者密碼,銀行資訊等。
再有就是使用HTTPS需要支付購買證書的費用,一些機構考慮到這點也可能優先選擇HTTP協議。
參考:
《圖解HTTP》