2008-09-22 81 views
6

(我问过JMeter的用户邮件列表的同样的问题,但我想也试试在这里 - 所以在至少我可以更新此一旦我找到答案)。“SocketException:未连接的插座没有实现”自签名证书

我在使用JMeter使用自签名的SSL证书来测试一个Tomcat Web应用程序的麻烦。 JMeter抛出一个带有消息Unconnected sockets not implemented的SocketException。 According to JMeter's docs,该应用程序的设计和编写是为了接受任何证书,自签名或CA签名或其他。

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

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

我也试着设置javax.net.debug =所有作为JVM ARG(the JSSE reference guide列出了此作为调试步骤);然而,我没有看到任何地方的调试输出 - 我应该期待这个标准输出/错误以外的地方吗?

回答

2

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

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

+0

你可以张贴一些链接,尤其是关于虫子的那些在某些版本的Java 6中? – 2008-09-22 20:44:09

0

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

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

0

尝试在SSLSocketFactory *中搜索你的类路径(在Eclipse中,我做ctrl-shift-t来做到这一点)。如果你找到一个,将其作为安全类的属性:

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

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

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

(或任何其他类你找到)

同样的ServerSocketFactory,如果你需要服务器套接字。

2

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

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

当我将这种方法添加到我的工厂时一切正常。

5

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

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

所以,我心中已经你继承抽象javax.net.SocketFactory,你将会被覆盖带参数的方法,但它很容易错过覆盖createSocket()方法,无需参数。因此,如果您的代码调用createSocket(),则会引发异常。只需重写该方法并完成。 :)