java - JMeter javax.net.ssl.SSLHandshakeException 间歇性

标签 java ssl jmeter sslhandshakeexception f5

我们正在运行一个 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 和 TLS_RSA_WITH_AES_128_CBC_SHA 密码套件,JMeter 也支持。

但我在 SSL 日志中看到以下失败的 JMeter 请求:

写入:TLSv1.2 握手,长度 = 64
阅读:TLSv1.2 警报,长度 = 2
RECV TLSv1.2 警报:致命,握手失败
%% 无效:[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--( key :RSA)RSA_WITH_RC4_128_SHA
3--( key :RSA)RSA_WITH_AES_128_CBC_SHA
3--( key :RSA)RSA_WITH_AES_256_CBC_SHA
3--( key :RSA)RSA_WITH_3DES_EDE_CBC_SHA
TLSv1.0:同上
TLSv1.2:
服务器选择:执行服务器首选项
3--( key :RSA)RSA_WITH_RC4_128_SHA
3--( key :RSA)RSA_WITH_AES_128_CBC_SHA
3--( key :RSA)RSA_WITH_AES_256_CBC_SHA
3--( key :RSA)RSA_WITH_3DES_EDE_CBC_SHA
3--( key :RSA)RSA_WITH_AES_128_CBC_SHA256
3--( key :RSA)RSA_WITH_AES_256_CBC_SHA256

关于可能出现的问题有什么想法吗?

最佳答案

我无法真正找出确切原因,但现在知道可能出了什么问题。按照 Dave 的建议,我打开了 SSL 调试并检查了所有日志,并将失败的请求与成功的请求进行了比较。

对于失败的请求,这是我在日志中看到的:

  1. 客户端发送你好&服务器发送你好
  2. 服务器发送证书和服务器问候完成
  3. 客户端 key 交换和更改密码规范
  4. 完成
  5. 此处失败,服务器没有更改密码消息,handshake_failure 错误

如您所见,服务器由于某种原因无法响应。经过一番谷歌搜索后,我偶然发现了以下有关 f5 SSL 问题的论坛。我们的服务也通过 f5。我无法确认,因为我对服务器端没有太多控制权,但下面的问题看起来很相似:

https://devcentral.f5.com/questions/big-ip-proxy-ssl-121-handshake-failure-47464

关于java - JMeter javax.net.ssl.SSLHandshakeException 间歇性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51228145/

相关文章:

java - 创建自定义 Hashmap()

Java Swing 应用程序重复 session

java - 用MiniDFSCluster对hadoop hdfs写的进行单元测试

java - Soundcloud JAVA api 包装器 : SSLException

perl - HTTP::Daemon::SSL 自动获取并提供中间证书

testing - 使用 Jmeter 或 Badboy 记录 AJAX 请求和弹出窗口

java - Hibernate 多对多关系

web-services - 是否有任何公共(public) Web 服务将检查 MTLS 证书并使用 application/json 响应

jmeter - Jmeter。 BeanShell后处理器

java - 使用 JMeter 和 AbstractJavaSamplerClient 加载要在测试中使用的文件内容