“SocketException:未连接的插座没有实现”自签名证书(“SocketException

2019-06-26 13:19发布

(我问过JMeter的用户邮件列表的同样的问题,但我想也试试在这里 - 所以在至少我可以回答这个更新一次,我找到它)。

我使用有问题JMeter的测试使用自签名的SSL证书一个Tomcat Web应用程序。 JMeter的投用消息SocketException Unconnected sockets not implemented 。 据JMeter的文档 ,应用程序设计和编写接受任何证书,自签名或CA签名或什么的。

有没有人遇到这个特定的异常之前?

我已经尝试此证书由服务器导出和导入到我的本地密钥库(使用keytool -import -alias tomcat的-file),但结果是一样的。

我还试图设置javax.net.debug =所有作为JVM ARG( 的JSSE参考指南列出了此作为调试步骤); 不过,我没有看到任何调试输出的任何地方 - 我应该想到这地方比标准输出/错误等?

Answer 1:

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

public Socket createSocket() throws IOException {
   throw new SocketException("Unconnected sockets not implemented");
}

所以,如果你继承抽象javax.net.SocketFactory ,你将会被覆盖带参数的方法,但它很容易错过覆盖createSocket()方法不带参数。 因此,如果你的代码调用抛出异常createSocket() 只是覆盖的方法和实现。 :)



Answer 2:

我在我的代码相同的问题(不涉及JMeter的)。

我的代码使用自定义SocketFactory 。 我发现了什么是类com.sun.jndi.ldap.Connection调用的一些方法SocketFactory使用Method.invoke() 它的一个尝试调用的方法是createSocket() -不带参数。

当我将这样的方法来我厂都能正常运作。



Answer 3:

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

所以,我要说,尝试使用Java 5.另外,尽量指向JMeter的,以使用适当的SSL证书一知名网站。 这样,您就可以测试的自签名证书的假说。



Answer 4:

我有类似的这种使用JDK 1.6.0_10 Web服务的问题。

我升级到1.6.0_16和一切工作。



Answer 5:

尝试搜索你的classpath(在Eclipse中,我CTRL-Shift-T键来做到这一点)为SSLSocketFactory的*。 如果你找到一个,将其作为安全类的属性:

在我的环境中,我发现有以下两种:

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

要么

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

(或任何其它类,你找到)

同样,对于ServerSocketFactory ,如果需要服务器套接字。



Answer 6:

这里是我的解决方案(Java 1.6)完全删除TLS_DHE_密码,力覆盖的方法的createSocket()

( https://gist.github.com/hoangthienan/735afb17ffd6955de95a49aa0138dbaa )



文章来源: “SocketException: Unconnected sockets not implemented” with self-signed SSL certificate
标签: java ssl