天天看點

HTTPS通信原理及與HTTP的差別

作者:外太空的金山

一、什麼是http?

超文本傳輸協定(Hyper Text Transfer Protocol,HTTP)是一個簡單的請求-響應協定,它通常運作在TCP之上。它指定了用戶端可能發送給伺服器什麼樣的消息以及得到什麼樣的響應。請求和響應消息的頭以ASCII形式給出;而 [9] 消息内容則具有一個類似MIME的格式。HTTP協定定義了用戶端與伺服器之間互動的消息内容和步驟

二、什麼是https?

即具有安全性的ssl加密傳輸協定,是以安全為目标的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性 。HTTPS 再HTTP 的基礎下加入SSL,HTTPS 的安全基礎是 SSL,是以加密的詳細内容就需要 SSL。 HTTPS 存在不同于 HTTP 的預設端口及一個加密/身份驗證層(在 HTTP與 TCP 之間)。這個系統提供了身份驗證與加密通訊方法。它被廣泛用于網際網路上安全敏感的通訊,例如交易支付等方面。

與http的關系為 https = http + SSL/TSL ,HTTPS 開發的主要目的,是提供對網站伺服器的身份認證,保護交換資料的隐私與完整性。

三、HTTP協定的不足

1、不驗證身份,導緻身份可能被僞裝

HTTP是不會對請求的雙方進行身份驗證的,伺服器不會校驗用戶端的身份,誰都可以向伺服器發送請求,任何人都的請求都會進行響應; 用戶端也不會驗證響應的資料是否是由自己請求的目标伺服器所發出。

2、明文通信,資料可能被竊取

HTTP的請求過程中是不會對通信内容進行加密的,在網絡中一旦請求或響應的資料被竊取就會導緻資料洩漏,造成資料安全問題。

3、無法驗證封包的完整性,内容可能被篡改。

HTTP不會驗證資料的前後一緻性,一旦資料傳輸的過程中遭遇中間人的篡改,通信的雙發是無法判斷自己接收的資料是否和對方發送的資料一緻性。

四、https解決方案

1、數字證書(解決身份僞裝問題)

HTTP不會對通信的雙方進行進行身份的驗證是以身份有可能被僞裝造成安全問題,是以為了解決這個問題是以産生了數字證書,數字證書的使用流程大概如下:

伺服器首先向一個大家都信任的第三方機構申請一個身份證書。

用戶端向伺服器建立通信之前首先向伺服器請求獲得伺服器的證書。

伺服器收到請求後把數字證書發送給用戶端。

用戶端獲得伺服器的證書之後,然後與可信任的第三方機構證書進行驗證,驗證通過後則進行正常的内容通信。

2、通信加密(解決資料被竊取問題)

因為HTTP不對通信内容進行加密處理,是以衍生了SSL加密技術協定,SLL采用混合加密(同時使用非對稱加密和對稱加密)的方式建立起安全的HTTP通信,經過加密後的内容即使被竊聽了,竊聽的人也無法解密對應的資料。

3、數字簽名(解決資料篡改問題)

Http不會對資料的完整性進行驗證,這樣會造成就算通信的過程中資料被别人惡意篡改了,通信的雙方也沒辦法知道,是以就有了數字簽名技術。

數字簽名主要有兩個作用,一是驗證資料是否為意料中的對象所發出的,二是對資料的完整性進行驗證,驗證資料是否被篡改過:

對需要發送的資料進行摘要

對資料進行摘要主要目的是确認資料的完整性,發送方首先根據約定的雜湊演算法把資料進行哈希,得到一個哈希值,因為兩個資料有任何一點不相同都會得出不同的哈希值,是以把對資料内容進行哈希得到哈希值作為資料的摘要發給對方;

然後對方收到資料後,首先自己也按照約定的雜湊演算法把接收到的資料内容進行哈希得到一個哈希值,然後把自己的哈希值與發送過來的摘要資訊進行比對,根據哈希值是否一緻來确認資料的完整性。

對摘要資訊進行簽名

對摘要進行簽名的目的主要是對确認資料發送人的身份,簽名技術是使用非對稱加密的原理,

非對稱加密是使用一個密鑰對(一個公鑰,一個私鑰),公鑰加密隻能由私鑰解密,私鑰加密隻能由公鑰解密; 公鑰是公布出來的密鑰,私鑰由自己安全保管不外洩,是以在私鑰不洩漏情況下,我們通過私鑰其實就可以确認發送資料方的身份。

那麼我們想要對A發送過來的資料進行身份驗證,那麼我們隻需要用A的公鑰對資料進行解密即可(如果可以解密,那麼就說明該資料是A用自己的私鑰進行加密過的,而A的私鑰又隻有A自己擁有)

五、HTTPS通信流程

第一步:用戶端向服務端發起請求

1、用戶端生成随機數R1 發送給服務端;

2、告訴服務端自己支援哪些加密算法;

第二步:伺服器向用戶端發送數字證書

1、服務端生成随機數R2;

2、從用戶端支援的加密算法中選擇一種雙方都支援的加密算法(此算法用于後面的會話密鑰生成);

3、服務端生成把證書、随機數R2、會話密鑰生成算法,一同發給用戶端;

第三步:用戶端驗證數字證書。

1、驗證證書的可靠性,先用CA的公鑰解密被加密過後的證書,能解密則說明證書沒有問題,然後通過證書裡提供的摘要算法進行對資料進行摘要,然後通過自己生成的摘要與服務端發送的摘要比對。

2、驗證證書合法性,包括證書是否吊銷、是否到期、域名是否比對,通過後則進行後面的流程

3、獲得證書的公鑰、會話密鑰生成算法、随機數R2

4、生成一個随機數R3。

5、根據會話秘鑰算法使用R1、R2、R3生成會話秘鑰。

6、用服務端證書的公鑰加密随機數R3并發送給服務端。

第四步:伺服器得到會話密鑰

1、伺服器用私鑰解密用戶端發過來的随機數R3

2、根據會話秘鑰算法使用R1、R2、R3生成會話秘鑰

第五步:用戶端與服務端進行加密會話

1、用戶端發送加密資料給服務端

發送加密資料:用戶端加密資料後發送給服務端。

2、服務端響應用戶端

解密接收資料:服務端用會話密鑰解密用戶端發送的資料;

加密響應資料:用會話密鑰把響應的資料加密發送給用戶端。

3、用戶端解密服務端響應的資料

解密資料:用戶端用會話密鑰解密響應資料;

繼續閱讀