我们使用 openssl 1.0.2k 来实现 TLS 相关功能。 在我们的一个部署中,客户端能够使用 TLSv1.2 完成 TLS 握手,并能够向服务器发送应用程序数据。在一些请求之后,TLS 连接从服务器端关闭并出现以下错误 “错误:1408F10B:SSL 例程:SSL3_GET_RECORD:错误的版本号”
TLS 握手步骤:
1. Client hello
2. Server Hello
3. Certificate,Certificate Request, Server hello done
4. Certificate,Client Key Exchange,Change Cipher spec,Encrypted handshake message
5. Change Cipher spec,Encrypted handshake message
6. Application data exchanges between client and server
7. Encrypted Alert(server to client)
8. Encrypted Alert( client to server
来自服务器端的错误日志显示“错误:1408F10B:SSL 例程:SSL3_GET_RECORD:版本号错误”
您能否告诉我们导致此问题的原因。如果 ssl 版本不匹配,那么握手阶段应该不会成功,对吗? 但在我们的例子中,握手是成功的,并且在一些应用程序数据传输之后,我们的服务器失败并出现此错误。
最佳答案
If the ssl version is mismatching then the handshake phase should not succeed right?
没有。任何 TLS 数据包都有 header , header 中有 TLS 版本:
(
byte - record_type
byte[2] - version
byte[2] - length
) header
byte[length] - encrypted or raw data
header 始终是原始的,从不加密。即使在握手期间客户端在所有 TLS 数据包中发送了 TLS 1.2 版本,他也可以在握手完成后发送另一个版本。或者中间的某个人可以修改网络流量。在这种情况下,OpenSSL 会抛出描述的错误。
关于c++ - TLS 握手成功后,服务器关闭并出现错误 SSL 例程 :SSL3_GET_RECORD:wrong version number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51473920/