HTTPS

 

1 HTTP缺點

HTTP是明文傳輸的,也就意味着,介於發送端、接收端中間的任意節點均可以知道傳輸的內容是什麼。算法

所以HTTP具備以下的缺點:服務器

  1. 竊聽風險:被第三方通訊內容。session

  2. 篡改風險:第三方修改客戶端和服務券的通訊內容。dom

  3. 冒充風險:第三方能夠仿冒客戶端或者服務端發給對端的通訊內容。

2 HTTPS

HTTPS實際上是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會經過TLS進行加密,因此傳輸的數據都是加密後的數據函數

 

2.1 客戶端發起HTTPS請求

客戶端與服務端之間創建TCP鏈接,使用的是443端口ui

 

2.2 handshake協議(握手協議)

client發送ClientHello,指定版本,隨機數(RN),全部支持的密碼套件(CipherSuites):加密

  1. TLS的版本
  2. 隨機數:這個是用來生成最後加密密鑰的影響因子之一,包含兩部分:時間戳(4-Bytes)和隨機數(28-Bytes)
  3. session-id:用來代表一次會話,第一次創建沒有。若是之前創建過,能夠直接帶過去。
  4. 加密算法套裝列表:客戶端支持的加密-簽名算法的列表,讓服務器去選擇。
  5. 壓縮算法:彷佛通常都不用
  6. 擴展字段:好比密碼交換算法的參數、請求主機的名字等等

 

 

收到client hello後,服務器恢復ACK,沒有使用捎帶確認spa

 

 

server迴應ServerHello,指定版本,RN(服務器生成的隨機數,稍後用於生成"對話密鑰"),選擇CipherSuites,會話ID(Session ID)server

經過這一步,客戶端和服務器就完成了加密和簽名算法的交換。xml

 

server發送Certificate

而後,服務器給客戶端展現證書

ServerKey Exchange:用來發送密鑰交換算法相關參數和數據的。根據密鑰交換算法的不一樣,傳遞的參數也是不一樣的。

ServerHello Done:服務器要傳輸的信息結束

 

client拿到servercertificate後,就能夠開始利用certificate裏的public key進行session key的交換了。

ClientKey Exchange:客戶端對Server Key Exchange的迴應,用於交換密鑰須要的參數。和服務器同樣,不一樣的密鑰交換算法實現是不同的,所以須要的參數也是有差別的:包含pre-master secret。客戶端生成第三個隨機數。若是是採用RSA算法,會生成一個48字節隨機數,而後用server的公鑰加密以後再放入報文中;

change_cipher_spec 客戶端使用上面的3個隨機數client random, server random, pre-master secret, 計算出48字節的master secret, 這個就是對稱加密算法的密鑰。

Server-Client已經將服務器認證的相關工做作完了,密文函數&密鑰交換須要的參數也都相互傳遞了。

  1. server hello 中選擇了加密函數
  2. ServerKey Exchange:傳遞加密函數的一個參數
  3. ClientKey Exchange:傳遞了機冪函數的另外一個參數。這個參數是使用服務器的公鑰加密過的

Encrypted Handshake Message:代表握手已經完成,而且對以前發過的數據進行加密發送給對方作校驗,防止被篡改。同時也驗證一下,加密算法、密鑰工做是否正常。

 

 

 

 

 

總結

SSL/TLS握手過程能夠分紅兩種類型:

  1. 雙向認證,就是雙方都會互相認證,也就是二者之間將會交換證書。
  2. 單向認證,客戶端會認證服務器端身份,而服務器端不會去對客戶端身份進行驗證

這個過程實際上產生三個隨機數:client random, server random, pre-master secret.前兩個隨機數都是明文傳送的,只有pre-master secret是加密的(RSA或者DH)。server使用RSA證書,RSA便可以用做簽名也能夠用做不對稱加密,pre-master secret就是用server的RSA證書中包含的公鑰加密的。

 3 HTTP與RAS

RSA算法在:

  1. 證書籤名的時候
  2. 密鑰交換

RAS計算過程:

  1. 選兩個超級大的素數:p 和 q

  2. 把他們乘起來:n = p * q

  3. 而後把p-1和q-1也乘起來:m = (p - 1) * (q - 1)

  4. 再找一個和m互質的數:e -> gcd(e, m) = 1

  5. 最後,找一個d,知足:(e * d) mod m = 1而後公鑰就是(n, e)的組合,私鑰就是(n, d)的組合

4 HTTPS與STL

TLS要作的事情就是兩個:身份校驗 & 加密算法和密鑰協商。

相關文章
相關標籤/搜索