握手期间收到 close_notify SSL 错误?

Received close_notify during handshake SSL Error?

我们在生产中一直面临这种奇怪的错误,在高容量(每小时约 1 万次)的情况下,我们 10% 的呼叫因下面提到的 SSL 异常而被拒绝。自 java 8 次要版本更新以来一直在发生这种情况。(JDK-8028518)。

Received close_notify during handshake
Caused by: javax.net.ssl.SSLProtocolException: Received close_notify during handshake
                at sun.security.ssl.Alert.createSSLException(Alert.java:129)
                at sun.security.ssl.Alert.createSSLException(Alert.java:117)
                at sun.security.ssl.TransportContext.fatal(TransportContext.java:314)

由于这只是一部分调用失败,我们无法理解为什么会发生这种情况。

我们使用以下行在客户端代码中设置 ssl 上下文

SSLContext ctx = SSLContext.getInstance(TLS);

javax.net.ssl.SSLProtocolException: Received close_notify during handshake

你能检查一下你的服务器线程数配置吗?

一种可能是在高负载下,更多(相对)高延迟请求导致此问题。

在轻负载下,服务器上可能有足够的线程来处理所有流量(因为高延迟请求也会相对较少)

一个可能的选择是

  1. 增加负载均衡器下的实际应用服务器
  2. 根据系统的吞吐量减少每个应用程序上配置的线程数。

在我们的案例中,发生这种情况是因为握手时间太长。 这是因为在客户端,在拨打电话之前,我们从安全存储中读取的时间太长,导致握手中途失败。这是通过引入安全存储相关对象的缓存而不是一次又一次地实例化它们来防止的。