1. 程式人生 > >HTTPS 基本流程3

HTTPS 基本流程3

前文說到了6 組key material, 12個hash 值,非常迷惑, 今天才搞明白, 原來所有這些內容就是 對稱金鑰的內容。

上面的圖 雖然不是很清晰,但是, 其實也已經寫明白了, 就是 右邊的 CBC 模式的部分。對於 CBC模式的DES加密演算法, 是需要這些內容的。

 

 

 

關於 身份認證, 其實不是 防止 篡改, 說的另外的一回事。 一般就是說,防止 middler man, 就是驗證 服務端就是 我想要的那個。 通過 證書 驗證, 可以完成 身份的認證。

當然, 其實我們也可以 對客戶端 進行認證, 這也是 身份認證的一部分。

  1. 身份認證:第三方無法偽造服務端(客戶端)身份

 

 

DH 演算法的通訊建立過程是這樣的:

 

 

 

 總之,如果協商過程使用 RSA 的話, 建立tls / ssl通道(正式傳輸 tls 上層資料之前)有7個 互動過程:

1 C->S:Client Hello
2 S->C:Server Hello
3 S->C:Certificate, Server Key Exchange, Server Hello Done
4 C->S:Client Key Change
5 C->S:Change Cipher Spec
6 C->S:Encryted Handshake Messagex`
7 S->C:Change Cipher Spec, Encryted Handshake Message
8 C->S/S->C:Application Data

 

簡單的SSL握手連線過程(Server端交換證書給client)

1.C->S:client傳送ClientHello,指定版本,隨機數(RN),所有支援的密碼套件(CipherSuites)

2.S->C:server迴應ServerHello,指定版本,RN,選擇CipherSuites,會話ID(Session ID)

3.S->C:server傳送Certificate

4.S->C:Server傳送ServerHelloDone

5.C->S:Client傳送ClientKeyExchange,用於與server交換session key

6.C->S:Client傳送ChangeCipherSpec,指示Server從現在開始傳送的訊息都是加密過的

7.C->S:Client傳送Finishd,包含了前面所有握手訊息的hash,可以讓server驗證握手過程是否被第三方篡改

8.S->C:Server傳送ChangeCipherSpec,指示Client從現在開始傳送的訊息都是加密過的

9.S->C:Server傳送Finishd,包含了前面所有握手訊息的hash,可以讓client驗證握手過程是否被第三方篡改,並且證明自己是Certificate金鑰的擁有者,即證明自己的身份

已經SSL握手完成,已經 建立tls / ssl通道了。

10 C->S/S->C:Application Data  開始正式資料互動

 

實際上呢, 2/3/4 幾個步驟是可以合併的, 5/6/7 也是,8/9 也是。 所以抓包的時候可以看到 4次通訊。

 

 

 參考:

https://blog.csdn.net/tterminator/article/details/50675540 非常非常詳細

https://blog.csdn.net/phunxm/article/details/72853376 非常非常詳細

https://blog.csdn.net/a_tu_/article/details/77119532

 http://www.cnblogs.com/svan/p/5090201.html