java - 将过期的 SSL 证书导入 Java keystore

标签 java ssl jmeter

我需要能够将 JMeter 指向一个 SSL 证书已过期的测试服务器(我们需要一段时间才能更新它)。 JMeter 在尝试连接时非常正确地抛出异常:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    at sun.security.ssl.SSLSessionImpl.getPeerCertificates(Unknown Source)
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
    at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
    at org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:284)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:62)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1075)
    at org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1064)
    at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:426)
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:255)
    at java.lang.Thread.run(Unknown Source)

有没有人知道我可以将所述证书导入 keystore 并在此过程中更改到期日期的任何方式(这甚至会有所帮助,或者服务器证书已过期的事实仍然会导致抛出此异常) ?

我试图将有效性设置为导入的一部分,但它被忽略了:

keytool -import ... -validity 100

P.S - 我知道我可以实现我自己的 TrustManager,它会忽略这些检查,但我的手指不允许我编写这种邪恶的代码,我更愿意找到一个我可以解决的解决方案在服务器上安装,无需修改 JMeter!

感谢您的宝贵时间。

最佳答案

JMeter 不验证证书,因此这不是您问题的原因。

您使用哪种实现,java、HC3 还是 HC4?

您的问题可能来自套接字版本协商中的错误。 尝试在 user.properties 中进行设置:

  • https.socket.protocols=SSLv2Hello SSLv3 TLSv1

根据您的服务器配置,您可能需要使用它们,例如只设置:

  • https.socket.protocols=SSLv3

关于java - 将过期的 SSL 证书导入 Java keystore ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16173327/

相关文章:

java - 不支持 Spring Social/connect/twitter 请求方法 'GET'

java - 如何在android中为搜索框设置动画

macos - 访问虚拟机中的本地站点(vmware fusion、virtualbox 等)

java - JDK 1.6 和 SSL 连接

multithreading - 如何从命令行运行 Jmeter 的特定线程

java - Selenium 无法检测到不正确的文本

java - 如何设置 Jackson 反序列化以将 Base64 编码的字符串转换为 Controller 内的对象

ssl - AlphaImageLoader png hack 是否可以在 IE6 上使用 SSL?

javascript - 在网页上加载测试 Javascript

javascript - Jmeter预请求脚本设置HTTP header 的值