【計算機網絡】HTTP 與 HTTPS

HTTP 與 HTTPS

HTTP (HyperText Transfer Protocol)協議爲超文本傳輸協議,常用在 Web 瀏覽器和網站服務器之間的通信,http 協議以明文發送內容,並不會提供任何加密功能。如果攻擊者截取了http 傳輸報文,就可以獲取到其中的信息,甚至惡意修改內容。因此,http 協議不適用於傳輸一些敏感信息,如密碼、信用卡號等支付信息。

爲了解決 http 協議的這個缺陷,在實際應用中常常使用 HTTPS (HyperText Transfer Protocol Secure)協議,即安全套接字層超文本傳輸協議。https 在 http 的基礎上加入了 安全套接字層(SSL,Secure Socket Layer)協議或者傳輸層安全(TLS,Transport Layer Security)協議。SSL 協議依靠證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通信加密,以保證數據傳輸的安全。TLS 由 TLS 記錄協議和 TLS 握手協議組成,用於兩個應用程序之間提供保密性和數據完整性。

需要注意的是,http 是應用層協議,https 是傳輸層協議(或者說 ssl / tls 是傳輸層協議)。

HTTPS

SSL

SSL(Secure Socket Layer),安全套接字層,位於可靠的面向連接的網絡層協議和應用層協議之間的一種協議層。SSL 通過互相認證、使用數字簽名確保完整性、使用加密確保私密性,以實現客戶端和服務器之間的安全通訊。該協議主要包括 SSL 記錄協議和 SSL 握手協議兩個層次。

SSL 協議提供的服務主要有:

  • 認證用戶和服務器,確保數據發送到正確的客戶機和服務器。
  • 加密數據以防止數據中途被竊取。
  • 維護數據的完整性,確保數據在傳輸過程中不被改變。

SSL 協議是通過四次握手來確認後續數據發送所需的一個密鑰,以及用來確認客戶端和服務器端雙方的身份。

  • 第一次握手:客戶端向服務器端發起一個 ClientHello 報文,用來建立 SSL 請求連接,並且客戶端會將自己所支持的一套加密套件一起發送給服務器;
  • 第二次握手:服務器端向客戶端回覆 ServerHello報文,它會從客戶端鎖支持的加密套件中選擇一個加密算法和 hash 算法,並且把自己的身份信息以證書的形式發送給客戶端。
  • 第三次握手:客戶端或者服務器的證書之後,先認證證書的合法性,如果證書受信任,則客戶端生成一串隨機密鑰(或密鑰素材,用以通過某種算法算法計算得到密鑰),並且用證書上的公鑰進行加密。然後把加密後的隨機密鑰發送給服務器端,並且告訴對方,後續的報文要開始加密了。
  • 第四次握手:服務器收到客戶端的報文後,首先用自己的私鑰將信息解密,取出上述的隨機密鑰(或密鑰素材),然後開始等候客戶端後續的加密報文。

至此四次握手結束,後續的報文就可以用該隨機密鑰進行加密解密,從而開始正常交互了。

SSL通信

總體來說,SSL 協議的工作流程需要實現兩個認證階段。

服務器認證階段:

  1. 客戶端向服務器端發送一個開始信息以創建一個新的會話連接。
  2. 服務器根據用戶的信息確定是否需要生成新的主密鑰,如需要則服務器在響應客戶時將包含生成主密鑰所需的信息
  3. 客戶根據收到的服務器響應信息,生成一個主密鑰,並用服務器的公開密鑰加密後傳給服務器。
  4. 服務器使用私鑰恢復主密鑰,並返回給客戶一個用主密鑰認證的信息,以此讓客戶認證服務器。

用戶認證階段:

  • 在服務器通過了客戶認證之後,服務器會發送一個提問給客戶,客戶則返回數字簽名後的提問和其公開密鑰,從而向服務器提供認證。

從上述過程可以看出,SSL 協議運行的基礎是商家對消費者信息保密的承諾,這就有利於商家而不利於消費者。在後期的發展中,單一認證的問題越來越突出,難以協調各方間的安全傳輸和信任關係,難以支持網上信用卡支付和電子交易等業務。

TLS

TLS 以 SSL 3.0 爲基礎於 1999 年作爲 SSL 的新版本退出。

TLS(Transport Layer Security),傳輸層安全協議,

  1. 更安全的 MAC 算法。
  2. 更嚴密的警報。
  3. “灰色區域”規範有更明確的定義。
  4. TLS 對於安全性的改進。

該協議由兩層組成: TLS 記錄協議(TLS Record)和 TLS 握手協議(TLS Handshake)。較低的層爲 TLS 記錄協議,位於某個可靠的傳輸協議(例如 TCP)上面。

TLS 記錄協議提供的連接安全性具有兩個基本特性:

  • 私有:數據加密過程使用對稱加密(DES、RC4 等)。對稱加密所產生的密鑰對每個連接都是唯一的,且此密鑰基於另一個協議(如握手協議)協商。記錄協議也可以不加密使用。
  • 可靠:信息傳輸包括使用密鑰的 MAC 進行信息完整性檢查。安全哈希功能(SHA、MD5 等)用於 MAC 計算。記錄協議在沒有 MAC 的情況下也能操作,但一般只能用於這種模式,即有另一個協議正在使用記錄協議傳輸協商安全參數。

TLS 記錄協議用於封裝各種高層協議。作爲這種封裝協議之一的握手協議允許服務器與客戶機在應用程序協議傳輸和接收其第一個數據字節前彼此之間相互認證,協商加密算法和加密密鑰。 TLS 握手協議提供的連接安全具有三個基本屬性:

  • 可以使用非對稱的,或公共密鑰的加密方法來認證對等方的身份。該認證是可選的,但至少需要一個結點方。
  • 共享加密密鑰的協商是安全的。對偷竊者來說協商加密是難以獲得的。此外經過認證過的連接不能獲得加密,即使是進入連接中間的攻擊者也不能。
  • 協商是可靠的。沒有經過通信方成員的檢測,任何攻擊者都不能修改通信協商。

TLS 的最大優勢就在於:TLS 是獨立於應用協議。高層協議可以透明地分佈在 TLS 協議上面。然而, TLS 標準並沒有規定應用程序如何在 TLS 上增加安全性;它把如何啓動 TLS 握手協議以及如何解釋交換的認證證書的決定權留給協議的設計者和實施者來判斷。

SSL 2.0 和 SSL 3.0 已經被 IEFT 組織廢棄。多年來,在被廢棄的 SSL 協議中一直存在漏洞並被發現。大多數現代瀏覽器遇到使用廢棄協議的 Web 服務時,會降低用戶體驗,以 https 表示警告來表現。因此,目前通常在服務端禁止使用 SSL 協議,僅僅保留 TLS 協議開啓。

HTTPS = HTTP + SSL

HTTP 協議沒有辦法確認通信方,有可能在傳輸過程中遭到篡改而不知。此時 HTTPS 出現了,它在 HTTP 上再加入加密處理和認證機制,HTTPS 是披着 SSL 外殼的 HTTP。https 協議的作用主要包括兩個方面:建立一個信息安全通道;確認網站的真實性。

HTTPS 採用共享祕鑰加密公開祕鑰加密混用的加密機制。

  • 共享祕鑰加密:使用一對非對稱的祕鑰。一把叫做私有祕鑰,一把叫做公有祕鑰。發送方使用公有祕鑰加密信息,接收方使用私有祕鑰進行解密。

  • 公開祕鑰加密:發送方和接收方使用同一把祕鑰進行加密。但是被第三者獲得祕鑰後可以肆意妄爲。

爲了證實公開密鑰的“正統性”,我們通過數字證書認證機構(CA)頒佈的公開祕鑰證書,可以確定申請者的身份並對已申請的公開密鑰進行簽名,然後分配這個公開祕鑰,並將這個公開祕鑰放入公鑰證書後綁定一起。服務器會將這份數字證書發送給客戶端,以便進行公開祕鑰加密通信。

https 與 http 的主要區別如下:

  • https 協議需要到 CA 申請證書,一般免費證書較少,因而需要一定費用。
  • http 是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的 ssl 加密傳輸協議。
  • http 和 https 使用的是完全不同的連接方式,用的端口也不一樣,前者是 80,後者是 443
  • http 的連接很簡單,是無狀態的;https 協議是由 ssl+http 協議構建的可進行加密傳輸、身份認證的網絡協議,比 http 協議安全。

由於在通信過程中需要加密和解密,所以與 HTTP 相比,HTTPS 的速度會慢 2-100 倍,雖然可以用 SSL 專用加速服務器來改善一下,但是仍然沒有根本性的解決方法。

HTTPS 工作過程

HTTPS 能夠加密信息,以免敏感信息被第三方獲取,所以很多銀行網站或電子郵箱等等安全級別較高的服務都會採用 HTTPS 協議。客戶端對服務器發來的證書進行驗證,驗證通過後使用非對稱加密對數據通信時的密鑰進行協商。協商後獲得一致的對稱加密密鑰。然後使用對稱加密算法進行 TCP 連接,後續的過程跟 http 的過程一致。

具體工作過程如下(SSL):

  1. 客戶端發起 https 請求(443 端口)。
  2. 服務器配置:採用 https 協議的服務器必須要有一套數字證書。
  3. 傳送證書(公鑰、頒發機構、過期時間等)。
  4. 客戶端解析證書:由客戶端的 TLS 完成,驗證公鑰的有效性。生成一個隨機值,用證書進行加密
  5. 傳送加密信息。
  6. 服務端解密信息:服務端用自己的私鑰解密後,得到客戶端傳送過來的隨機值,之後的傳輸內容可以用該隨機值與信息通過某種算法混合在一起,進行對稱加密。
  7. 傳輸加密後的信息。
  8. 客戶端解密信息:雙方都知道隨機值,信息可以在客戶端被還原。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章