2015-03-13 63 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