【问题标题】:Unconnected sockets not implemented未实现未连接的套接字
【发布时间】:2016-04-08 03:14:21
【问题描述】:

我必须使用 2 路身份验证访问网络服务。以下是我的方法。

创建了 MyCustomSSLSocketFactory 类。

  1. 加载的 TrustManagers
  2. 已加载的密钥库管理器
  3. 如下创建 SSL 上下文和 SSL 套接字工厂。

我在调用 webservice 方法之前调用了这个类方法。

然后我做了如下:-

AxisProperties.setProperty("axis.socketSecureFactory",
                            "com.elipva.zephyr.twofa.util.MyCustomSSLSocketFactory");

Security.setProperty("ssl.SocketFactory.provider",
                    "com.elipva.zephyr.twofa.util.MyCustomSSLSocketFactory");


SSLContext context = SSLContext.getInstance(protocolVersion);
context.init(keyManagers, trustManagers, null);
SSLSocketFactory socketFactory = context.getSocketFactory();

URL url = new URL(urlString);
URLConnection connection = url.openConnection();
  if (connection instanceof HttpsURLConnection) {
    ((HttpsURLConnection) connection)
                .setSSLSocketFactory(sslSocketFactory);

            connection.connect();
        }   

当我访问网络服务时,它给了我以下错误。

org.apache.axis2.AxisFault: Unconnected sockets not implemented
    at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
    at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:203)
    at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76)
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400)
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225)
    at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435)
    at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)
    at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)

如果我遗漏了什么,请告诉我。

【问题讨论】:

  • 我也尝试了以下方法,但它不起作用。 System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); Security.addProvider(新的 com.sun.net.ssl.internal.ssl.Provider()); System.setProperty("https.protocols", "SSLv3,TLSv1"); System.setProperty("javax.net.ssl.trustStore", ""); System.setProperty("javax.net.ssl.trustStorePassword", ""); System.setProperty("javax.net.ssl.trustStoreType", "");ecurity.ssl.allowUnsafeRenegotiation", "true");
  • System.setProperty("javax.net.ssl.keyStore", ""); System.setProperty("javax.net.ssl.keyStorePassword", ""); System.setProperty("javax.net.ssl.keyStoreType", ""); System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");但是上面的方法给了我握手失败的错误。我已正确导入证书,并且我在密钥库设置中使用的 pfx 文件中有私钥。

标签: java web-services ssl axis


【解决方案1】:

问题已解决,只需在 cacerts 文件中导入证书即可。

【讨论】:

  • 请问您导入的是什么证书?
【解决方案2】:

我认为可能是这个 Java 错误 - http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6771432

请注意,这应该在 java 1.6.0_u14 中修复

【讨论】:

  • 您能否提供一些指示,告诉我如何通过 2 路 SSL 身份验证工作,我已经尝试了上述两种方法,似乎只有以上两种方法在我的论坛中也可用。
  • 问题得到了解决..对于通过 system.properties 的第二种方法..刚刚尝试使用新的密钥库和信任库。我们只使用 java 1.5。但我关心的是如何使用第一种方法,任何人都可以帮助解决那个异常......未实现的套接字......如果有人会写一段代码......请分享......它将是 gr8 使用......跨度>
  • 托管了不同的 web 服务,但是当我使用 "?wsdl" 访问服务时,我得到了我的 wsdl 文件。在soap:address 中,位置值是以“http”“XXXXXXX”开头的,但我需要将其从“http”更改为“HTTPS”。我尝试更改axis2.xml并为https添加了传输接收器,但它不起作用。我需要更改的地方,1.) service.xml..?? 2.) 或axis2.xml..??
  • 遇到了同样的异常,支持在 java 1.4 上运行的遗留项目。最终需要从 cacerts 文件中卸载证书,然后重新安装。此后,问题自行解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 2014-06-30
  • 2015-03-09
  • 2020-08-29
相关资源
最近更新 更多