在调查 Web 服务的相互 SSL 身份验证问题期间,我使用wireshark 跟踪了 SOAP UI 客户端和服务器之间的工作行为,以便了解当我注意到一些奇怪的情况时它的行为方式。
当客户端和服务器之间的握手和通信正确时,我仍然注意到同样奇怪的行为;如下:
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。
最佳答案
经过深入调查,实际上看起来没有真正的加密握手消息:当握手记录被分割时,wireshark无法重新组合它们。由于这个问题,加密握手消息实际上是一个工件。
由于记录最大长度为 2^14 字节,每当握手消息较长时,它就会被分割成多个记录。
Wireshark 以及我的“失败的客户端”似乎无法重建这些分割记录。 看起来像wireshak 中已知的未修复错误:https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=3303
关于ssl - 服务器在服务器问候后立即发送加密握手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29040875/