9

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

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

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

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

我还尝试将 javax.net.debug=all 设置为 JVM arg(JSSE 参考指南将此列为调试步骤);但是,我在任何地方都看不到任何调试输出 - 除了标准输出/错误之外,我是否应该期待这个?

4

6 回答 6

12

大多数javax.net.SocketFactory实现将所有具有参数createSocket()的方法定义为抽象。但是有一个没有参数的方法,如下所示:createSocket()

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

因此,如果您将抽象子类化,javax.net.SocketFactory您将被迫用参数覆盖方法,但是很容易错过覆盖createSocket()没有参数的方法。因此,如果您的代码调用createSocket(). 只需覆盖该方法即可完成。:)

于 2015-01-04T10:17:42.790 回答
3

我的代码中有同样的问题(与 JMeter 无关)。

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

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

于 2011-07-05T08:15:11.767 回答
2

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

所以,我想说,尝试使用 Java 5。另外,尝试将 JMeter 指向一个使用适当 SSL 证书的知名站点。这样您就可以测试自签名证书假设。

于 2008-09-22T20:30:31.703 回答
0

尝试搜索 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,如果您需要服务器套接字。

于 2009-12-08T17:06:44.520 回答
0

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

我升级到 1.6.0_16 并且一切正常。

于 2009-09-03T18:40:09.677 回答
0

这是我的解决方案(java 1.6)完全删除 TLS_DHE_ 密码,强制覆盖方法 createSocket()

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

于 2016-08-01T09:06:28.630 回答