2015-03-13 112 views
1

在調查Web服務的相互SSL身份驗證問題期間,我跟蹤了wireshark SOAP客戶端與服務器之間的工作行爲,以瞭解它如何表現,因爲我發現了一些奇怪的。服務器在服務器之後立即發送加密握手

當客戶端和服務器之間的握手和通信正確時,我仍然注意到相同的奇怪行爲;這是以下內容:

37. Client -> Server: Client Hello 
54. Server -> Client: Server Hello, Certificate 
61. Server -> Client: Encrypted Handshake Message 
62. Client -> Server: Certificate, Client Key Exchange 
64. Client -> Server: Certificate Verify 
65. Client -> Server: Change Cipher Spec 
66. Client -> Server: Encrypted Handshake Message 
69. Server -> Client: Change Cipher Spec 
74. Server -> Client: Encrypted Handshake Message 
75. Client -> Server: Application Data 
... 
434. Server -> Client: Application Data 
686. Server -> Client: Encrypted Alert 

一切似乎很正常,除了行61加密。 它肯定包含「證書請求」和「服務器你好完成」,因爲一切工作正常(和客戶端提供自己的證書行62),但我絕對不知道如何加密消息行61,因爲我不明白客戶端和服務器本來可以交換足夠的數據來加密任何東西。

服務器使用的密碼套件爲TLS_RSA_WITH_AES_128_CBC_SHA。

因爲非工作客戶端在收到加密握手消息後立即發送TCP RST,所以有關如何儘早對其進行加密的任何見解都可以幫助我解決正在調查的問題。

+0

(1)您確定61是此連接的一部分,而不是以前發生的另一個錯誤?給定一對地址並且服務器通常位於固定端口上,客戶端端口會有所不同。 (2)該協議實際上並沒有說「加密」,所以Wireshark認爲它無法解碼的內容是加密的。你是對的,那裏應該有什麼(對於那個商定的密碼組)是CertReq和ServerHelloDone,這兩個*應該很容易解碼,但看看字節(在字節窗格中,通常是底部或右邊,取決於佈局你選擇了)。 – 2015-03-13 20:51:24

+0

證書消息只會在CertificateRequest請求時出現。 – EJP 2015-03-13 21:51:15

+0

深入瞭解:wireshark似乎沒有正確解碼服務器 - >客戶端多重握手消息:第54行不止服務器Hello +證書,但「長度」設置爲16 384(基於RFC 5246的最大長度)。 我會深入挖掘,但看起來像這樣的早期加密握手消息只是wireshark的副作用,告訴它不瞭解任何有關消息內容的信息。 – 2015-03-13 22:34:53

回答

1

經過深入調查,實際上看起來沒有真正的加密握手消息:wireshark在拆分時無法重新組合握手記錄。由於這個問題,加密的握手消息實際上是一個人爲因素。

由於記錄最大長度爲2^14個字節,因此每當握手消息較長時,就會將其拆分爲多個記錄。

Wireshark以及我的「失敗的客戶端」似乎無法重建這些分割記錄。 看起來像一個已知的wireshak中的不固定的錯誤:https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=3303

相關問題