具有自签名SSL证书的" SocketException:未实现未连接的套接字"

时间:2020-03-06 14:33:22  来源:igfitidea点击:

(我问过jmeter-user邮件列表的相同问题,但我也想在这里尝试,这样,至少找到它后,我才能用答案更新它)。

我在使用JMeter使用自签名SSL证书测试Tomcat Web应用程序时遇到了麻烦。 JMeter抛出SocketException并显示消息"未实现未连接的套接字"。根据JMeter的文档,该应用程序的设计和编写可以接受任何证书,自签名或者CA签名或者任何其他形式。

之前有人遇到过这个特定例外吗?

我试图从服务器导出此证书并将其导入到我的本地密钥库中(使用keytool -import -alias tomcat -file),但是结果是相同的。

我还尝试将javax.net.debug = all设置为JVM arg(《 JSSE参考指南》将其列为调试步骤)。但是,除了标准输出/错误之外,我在任何地方都看不到任何调试输出吗?

解决方案

这只是一个提示,而不是一个正确的答案:粗略地浏览Google结果似乎表明,该异常通常是由强制使用默认SSL套接字工厂的代码引起的,该代码故意在调用createSocket()时抛出异常它。一些结果似乎表明,该问题有时是由于Java 6中某些版本的错误或者向密钥库提供了错误的路径或者密码而发生的。

因此,我想说,尝试使用Java5. 此外,尝试将JMeter指向使用适当SSL证书的知名站点。这样,我们可以测试自签名证书假设。

我在jdk 1.6.0_10中遇到了与此类似的Web服务问题。

我升级到1.6.0_16,一切正常。

尝试在类路径中搜索SSLSocketFactory *(在Eclipse中,我这样做是ctrl-shift-t)。如果找到一个,请将其设置为Security类的属性:

在我的环境中,我发现了以下两个:

Security.setProperty("ssl.SocketFactory.provider", "com.ibm.jsse2.SSLSocketFactoryImpl");

或者

Security.setProperty("ssl.SocketFactory.provider", "com.ibm.websphere.ssl.protocol.SSLSocketFactory");

(或者我们找到的其他任何班级)

如果我们需要服务器套接字,则对于ServerSocketFactory也是类似的。