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

mat*_*t b 8 java ssl

(我已经问过jmeter用户邮件列表的相同问题,但我也想在这里尝试一下 - 所以至少我可以在找到它之后用答案更新它).

我在使用JMeter使用自签名SSL证书测试Tomcat webapp时遇到问题.JMeter抛出带有消息的SocketException Unconnected sockets not implemented.根据JMeter的文档,该应用程序的设计和编写是为了接受任何证书,自签名或CA签名或其他.

有没有人遇到过这个特定的例外?

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

我也尝试将javax.net.debug = all设置为JVM arg(JSSE参考指南将此列为调试步骤); 但是,我没有在任何地方看到任何调试输出 - 我应该在标准输出/错误之外的其他地方预期吗?

Flo*_*low 11

大多数javax.net.SocketFactory实现将所有具有参数的createSocket()方法定义为抽象.但是有一个没有参数的方法看起来像这样:createSocket()

public Socket createSocket() throws IOException {
   throw new SocketException("Unconnected sockets not implemented");
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您对抽象进行子类化,则javax.net.SocketFactory您将强制使用参数覆盖方法,但很容易错过覆盖createSocket()不带参数的方法.因此,如果您的代码调用,则抛出异常createSocket().只需覆盖方法即可完成.:)


Ale*_*der 2

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

因此,我想说,尝试使用 Java 5。此外,尝试将 JMeter 指向使用正确 SSL 证书的知名站点。这样您就可以测试自签名证书的假设。