如何通过对等'错误调试和修复间歇性SSL'连接重置?

时间:2016-08-22 09:36:34

标签: ssl openssl ssl-certificate

当通过HTTPS连接到服务器(Windows / IIS)时,我们的客户端(CentOS)偶尔出现(100个)错误。

错误是:SSL: Connection reset by peer

运行openssl s_client -connect example.com:443 -prexit 99%的时间都有效,但有时返回write:errno=104确认连接重置问题。

有趣的是,当连接重置并失败时握手是一个不同的(较小的)大小,但我看不到如何实际看到握手。

成功的连接是:SSL handshake has read 5308 bytes and written 319 bytes

连接失败是:SSL handshake has read 5249 bytes and written 198 bytes

始终使用相同的协议(TLS)和密码。

服务器端,Windows事件日志中的错误是:A fatal alert was generated and sent to the remote endpoint. This may result in termination of the connection. The TLS protocol defined fatal error code is 20. The Windows SChannel error state is 960.

致命错误代码20为Received a record with an incorrect MAC. This message is always fatal.

任何人都可以帮助进一步调试吗?由于这只是一个偶然的问题,我正在努力思考它为什么会发生。谢谢!

1 个答案:

答案 0 :(得分:1)

不是应用程序错误,但很可能是基础结构中的低级错误。不特定于SSL,而是特定于面向连接的套接字。数据包TTL到期,网络路由更改或其他许多原因。编写正确的套接字代码将始终重试几次,然后再失败。由于很难在短时间内重复进行调试,因此很难调试。

很多年前,这个错误使我发疯。我做了一切可以追踪的事情,甚至写了一个监视器来遍历系统的网络图,以确保该图的每个节点都可以正常工作并正确响应。大约一年后,更换子网上的交换机后,问题消失了。开关靠近应用程序,而不靠近数据中心图中的节点。