【发布时间】:2018-12-16 02:39:07
【问题描述】:
我们正在运行一个 JMeter 脚本,它将 json 数据发布到内部 https 端点。但是我们在运行脚本时会间歇性地收到 javax.net.ssl.SSLHandshakeException(大约 100 次调用中的 3 次)。
此问题与以下 SO 问题非常相似,但此处讨论的所有解决方案均不适用于我: javax.net.ssl.SSLHandshakeException: handshake_failure when using JMeter with SSL (JDK8)
我正在使用 JDK8 和最新的 JMeter 4.0 版。我打开了 ssl 调试,从 ClientHello 和 ServerHello 消息中,看起来服务器支持 TLS 1.2 和 JMeter 也支持的 TLS_RSA_WITH_AES_128_CBC_SHA 密码套件。
但我在 SSL 日志中看到以下失败的 JMeter 请求:
写入:TLSv1.2 握手,长度 = 64
阅读:TLSv1.2 警报,长度 = 2
RECV TLSv1.2 ALERT:致命,handshake_failure
%% 无效:[Session-17, TLS_RSA_WITH_AES_128_CBC_SHA]
我尝试了以下解决方案:
1. jre cacerts 新增服务器证书
2. 为不支持的密码下载本地策略 jar 并将它们复制到 jre lib 安全文件夹
3. 更新 JMeter 的 httpclient jar (4.5)
4.在JMeter配置中显式启用TLS 1.2
我使用 TestSSLServer 来测试我们服务器的 SSL 功能,它返回的是:
SSLv3:
服务器选择:强制执行服务器首选项
3--(密钥:RSA)RSA_WITH_RC4_128_SHA
3--(密钥:RSA)RSA_WITH_AES_128_CBC_SHA
3--(密钥:RSA)RSA_WITH_AES_256_CBC_SHA
3--(密钥:RSA)RSA_WITH_3DES_EDE_CBC_SHA
TLSv1.0:同上
TLSv1.2:
服务器选择:强制执行服务器首选项
3--(密钥:RSA)RSA_WITH_RC4_128_SHA
3--(密钥:RSA)RSA_WITH_AES_128_CBC_SHA
3--(密钥:RSA)RSA_WITH_AES_256_CBC_SHA
3--(密钥:RSA)RSA_WITH_3DES_EDE_CBC_SHA
3--(密钥:RSA)RSA_WITH_AES_128_CBC_SHA256
3--(密钥:RSA)RSA_WITH_AES_256_CBC_SHA256
关于可能出现什么问题的任何想法?
【问题讨论】:
-
目前为止的最佳选择,查看服务器日志以了解问题所在,然后进行调查并解决问题。否则设置 sysprop
javax.net.debug=ssl并保存将是巨大的输出(您可能需要购买更多磁盘)并花费数天或数周的时间来研究它。当服务器接受 AES128 时,您的 1 和 4 永远不会导致此警报,而您的 2 则不会。 (注意接受不等于要求;你的“期望”是模棱两可的。) -
感谢您的回复。我用 TestSSLServer 的结果编辑了这个问题,看起来 RSA_WITH_AES_128_CBC_SHA 是服务器的偏好之一。实际上,我在服务器端没有太多的控制权来调试东西。我想知道故障出在哪里,在客户端还是在服务器端。
标签: java ssl jmeter sslhandshakeexception f5