1. 程式人生 > >HTTPS協議入門

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》