JMeter javax.net.ssl.SSLHandshakeException间歇性异常

JMeter javax.net.ssl.SSLHandshakeException间歇性异常,java,ssl,jmeter,sslhandshakeexception,f5,Java,Ssl,Jmeter,Sslhandshakeexception,F5,我们正在运行一个JMeter脚本,该脚本将json数据发布到内部https端点。但是我们在运行脚本时会间歇性地(大约100次调用中有3次)出现javax.net.ssl.SSLHandshakeException 这个问题与下面的问题非常相似,但这里讨论的所有解决方案都不适用于我: 我正在使用JDK8和最新的JMeter版本4.0。我打开了ssl调试,通过ClientHello和ServerHello消息,看起来服务器支持TLS 1.2和TLS_RSA_以及JMeter支持的_AES_128_

我们正在运行一个JMeter脚本,该脚本将json数据发布到内部https端点。但是我们在运行脚本时会间歇性地(大约100次调用中有3次)出现javax.net.ssl.SSLHandshakeException

这个问题与下面的问题非常相似,但这里讨论的所有解决方案都不适用于我:

我正在使用JDK8和最新的JMeter版本4.0。我打开了ssl调试,通过ClientHello和ServerHello消息,看起来服务器支持TLS 1.2和TLS_RSA_以及JMeter支持的_AES_128_CBC_SHA密码套件

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

写入:TLSv1.2握手,长度=64
读取:TLSv1.2警报,长度=2
RECV TLSv1.2警报:致命,握手失败
%%无效:[会话17,TLS\U RSA\U与\u AES\u 128\u CBC\u SHA]

我尝试了以下解决方案:
1.将服务器证书添加到jre证书
2.下载了不支持密码的本地策略JAR,并将其复制到jre lib安全文件夹
3.为JMeter更新httpclient jar(4.5)
4.在JMeter配置中显式启用TLS 1.2

我使用TestSSLServer测试服务器的SSL功能,它返回的结果如下:
SSLv3:
服务器选择:强制服务器首选项
3--(密钥:RSA)带RC4的RSA\U 128\U SHA
3--(密钥:RSA)带AES的RSA\U 128\U CBC\U SHA
3--(密钥:RSA)带AES的RSA\U 256\U CBC\U SHA
3--(密钥:RSA)RSA_与_3DES_EDE_CBC_SHA
TLSv1.0:idem
TLSv1.2:
服务器选择:强制服务器首选项
3--(密钥:RSA)带RC4的RSA\U 128\U SHA
3--(密钥:RSA)带AES的RSA\U 128\U CBC\U SHA
3--(密钥:RSA)带AES的RSA\U 256\U CBC\U SHA
3--(密钥:RSA)RSA_与_3DES_EDE_CBC_SHA
3--(密钥:RSA)带AES的RSA\U 128\U CBC\U SHA256
3--(密钥:RSA)RSA_与_AES_256_CBC_SHA256


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

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

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

  • 客户端发送Hello&服务器发送Hello
  • 服务器已发送证书&服务器Hello已完成
  • 客户端密钥交换和更改密码规范
  • 完成
  • 此处失败,并且没有来自服务器的更改密码消息,握手失败错误
  • 如您所见,服务器由于某种原因无法响应。在谷歌搜索之后,我偶然发现了以下关于F5SSL问题的论坛。我们的服务也通过f5。我无法确认,因为我对我们的服务器端没有太多控制权,但以下问题看起来类似:


    对于13.0之前的BIG-IP版本,这是中记录的一个已知问题,如中所述。

    到目前为止的最佳选择,请查看服务器日志以了解问题所在,然后调查并修复该问题。否则,设置sysprop
    javax.net.debug=ssl
    并保存输出,这将是巨大的(您可能需要购买更多磁盘),并花费数天或数周的时间仔细阅读。当服务器接受AES128时,您的1和4永远不会导致此警报,而您的2则不会。(注意接受与要求不同;您的“期望”不明确。)谢谢您的回复。我用TestSSLServer的结果编辑了这个问题,看起来RSA_with_AES_128_CBC_SHA是服务器的首选项之一。实际上,我在服务器端没有太多的控制来调试东西。我想知道故障出在哪里,是客户端还是服务器端。我们在F5 ProxySSL上遇到了非常类似的问题,即破坏扩展的主密钥扩展。在服务器上禁用是我们的解决方案。此外,您在问题中没有提到这个代理元素(f5)。是的,我之前不认为它可能与f5有关,但在查看SSL日志和一些搜索之后,这是有意义的。我想我应该把这个标记为答案。Java的最新版本(8u161和9.0.4)确实支持ExtendedMasterSecret,但他们(会)在每次握手时使用它,它不会是断断续续的。仅供参考,Java的最新版本不再需要无限的策略jar;他们最终消除了这一几十年来的缺陷。祝你好运,最新消息。我们的服务器团队告诉我们,他们已经解决了f5 SSL设置的问题,并表示当相同的IP连续访问服务时,这是一个边缘案例。我现在没有太多的细节,但我会在这里张贴一旦我这样做。谢谢你帮助Dave和Eugène。另一个更新。这个问题已经解决了。我们的服务器团队对f5的设置做了一些更改(我仍然没有详细说明),我们运行了JMeter自动化,我们不再看到SSL握手异常:)