在調查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,所以有關如何儘早對其進行加密的任何見解都可以幫助我解決正在調查的問題。
(1)您確定61是此連接的一部分,而不是以前發生的另一個錯誤?給定一對地址並且服務器通常位於固定端口上,客戶端端口會有所不同。 (2)該協議實際上並沒有說「加密」,所以Wireshark認爲它無法解碼的內容是加密的。你是對的,那裏應該有什麼(對於那個商定的密碼組)是CertReq和ServerHelloDone,這兩個*應該很容易解碼,但看看字節(在字節窗格中,通常是底部或右邊,取決於佈局你選擇了)。 – 2015-03-13 20:51:24
證書消息只會在CertificateRequest請求時出現。 – EJP 2015-03-13 21:51:15
深入瞭解:wireshark似乎沒有正確解碼服務器 - >客戶端多重握手消息:第54行不止服務器Hello +證書,但「長度」設置爲16 384(基於RFC 5246的最大長度)。 我會深入挖掘,但看起來像這樣的早期加密握手消息只是wireshark的副作用,告訴它不瞭解任何有關消息內容的信息。 – 2015-03-13 22:34:53