日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用wireshark观察SSL/TLS握手过程--双向认证/单向认证

發布時間:2025/5/22 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用wireshark观察SSL/TLS握手过程--双向认证/单向认证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SSL/TLS握手過程可以分成兩種類型:

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

我們知道,握手過程實際上就是通信雙方協商交換一個用于對稱加密的密鑰的過程,而且握手過程是明文的。
這個過程實際上產生三個隨機數:client random, server random, pre-master secret. 參考圖解SSL/TLS協議?.

前兩個隨機數都是明文傳送的,只有pre-master secret是加密的(RSA或者DH)。
一般生成證書的時候,簽名算法可以選擇RSA或者DSA算法。
如果server使用RSA證書,RSA即可以用作簽名也可以用作不對稱加密,pre-master secret就是用server的RSA證書中包含的公鑰加密的。
如果server使用DSA證書,DSA只能用作簽名,所以還需要使用DH算法來交換密鑰。

以下是其流程圖(摘自rfc5246),括號中的步驟是可選的。
如果是單向認證,那么藍色字體部分是不需要的。
4 server_key_exchange這一步只有在選擇了某些密鑰交換算法例如DH算法的時候才需要。

?

Client

Server

1 Client Hello?
?

2 Server Hello
3 certificate
4 (server_key_exchange)
5 (certificate_request)
6 server_hello_done

7 (certificate)
8 client_key_exchange
9 (certifiate_verify)
10 change_cypher_spec
----finished----
?
?11 change_cypher_spec
----finished----

?

?

下面使用wireshark抓取握手過程的報文。server/client使用JAVA7/JSSE編碼。

server證書簽名算法RSA-雙向認證

可見包括了除了4以外的所有步驟。因為采取了RSA算法,所以步驟4是不需要的。

(一) 首先,客戶端向服務器提供以下信息

client_hello
(1)支持的協議版本,比如TLS 1.0
(2)支持的加密算法(Cipher Specs)
(3)客戶端生成的隨機數1(Challenge),稍后用于生成"對話密鑰"。

(二)服務器回答給客戶端以下信息

server_hello
(1) 確認使用的協議版本
(2) 服務器生成的隨機數2,稍后用于生成"對話密鑰"
(3) session id
(4) 確認使用的加密算法
certificate
服務器證書
server_key_exchange
如果是DH算法,這里發送服務器使用的DH參數。RSA算法不需要這一步。
certificate_request
要求客戶端提供證書,包括
(1) 客戶端可以提供的證書類型
(2)服務器接受的證書distinguished name列表,可以是root CA或者subordinate CA。如果服務器配置了trust keystore, 這里會列出所有在trust keystore中的證書的distinguished name。
server_hello_done
server hello結束

(三)客戶端發送給服務器

certificate
客戶端證書
client_key_exchange
包含pre-master secret。客戶端生成第三個隨機數。如果是采用RSA算法,會生成一個48字節隨機數,然后用server的公鑰加密之后再放入報文中;如果是DH算法,這里發送的就是客戶端的DH參數,之后服務器和客戶端根據DH算法,各自計算出相同的pre-master secret。
certificate_verify
發送使用客戶端證書給到這一步為止收到和發送的所有握手消息簽名結果。
change_cipher_spec
客戶端通知服務器開始使用加密方式發送報文。客戶端使用上面的3個隨機數client random, server random, pre-master secret, 計算出48字節的master secret, 這個就是對稱加密算法的密鑰。
finished
客戶端發送第一個加密報文。使用HMAC算法計算收到和發送的所有握手消息的摘要,然后通過RFC5246中定義的一個偽函數PRF計算出結果,加密后發送。

(四) 服務器發送給客戶端
服務器端發送change_cipher_specfinished消息。到這里握手結束。


server證書簽名算法DSA-雙向認證

下面是一個server證書采用DSA算法的握手過程。由于采用了DH算法交換密鑰,多了server_key_exchange這一步。

?

server證書簽名算法RSA-單向認證

和雙向認證相比,server端少了certificate_request,client端少了certificate?和?certificate_verify

總結

以上是生活随笔為你收集整理的使用wireshark观察SSL/TLS握手过程--双向认证/单向认证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。