【问题标题】:javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? [duplicate]javax.net.ssl.SSLException:无法识别的 SSL 消息,明文连接? [复制]
【发布时间】:2011-06-06 15:12:25
【问题描述】:

如何在使用轴 jar 从 java 调用托管在 SSL ("https:") 协议上的 .net Web 服务 (asmx) 时解决上述异常。

执行代码时收到以下错误消息:

faultDetail: 
 {http://xml.apache.org/axis/}stackTrace:javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
 at com.ibm.jsse2.a.c(a.java:228)
 at com.ibm.jsse2.a.a(a.java:63)
 at com.ibm.jsse2.jc.a(jc.java:465)
 at com.ibm.jsse2.jc.g(jc.java:458)
 at com.ibm.jsse2.jc.a(jc.java:67)
 at com.ibm.jsse2.jc.startHandshake(jc.java:342)
 at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186)
 at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)
 at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)
 at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
 at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
 at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
 at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
 at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
 at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
 at org.apache.axis.client.Call.invoke(Call.java:2767)
 at org.apache.axis.client.Call.invoke(Call.java:2443)
 at org.apache.axis.client.Call.invoke(Call.java:2366)
 at org.apache.axis.client.Call.invoke(Call.java:1812)
 at examples.Example_client.main(Example_client.java:79)

 {http://xml.apache.org/axis/}hostname:D-113020008

【问题讨论】:

  • 请使用“编辑”链接并在要显示为代码的每一行前面添加 4 个前导空格。 (如果您先选择文本,则会有一个按钮为您执行此操作)
  • 您究竟是如何调用此服务的?

标签: java ssl https asmx axis


【解决方案1】:

正如错误消息所说,对等方使用纯文本而不是 SSL 的可能性是。

【讨论】:

  • 我们正在通过代理服务器调用网络服务,我们无法控制代理绕过此网络服务 url
  • 我们还为 https.proxyhost、https.proxyPort、https.proxyUser 和 https.proxyPassword 设置了系统属性。
  • @lakshmi:我不明白这有什么不同。您仍在使用 SSL 连接显然是纯文本服务。
  • 其实我遇到了这个问题,它与代理设置相关联的。在我的情况下,我需要绕过代理设置,只使用与服务的直接连接。我可以通过在http.nonProxyHosts HTTP 设置中设置目标系统的主机名来做到这一点,这与为非 HTTPS 主机设置的属性相同。在 Axis 中可以这样做:AxisProperties.setProperty("http.nonProxyHosts", "example.com");(这是一篇关于 Java networking and proxies 的有用文章)。
  • @chrisjleu:同样,我们的测试服务器没有被列入白名单,不允许通过代理而无需身份验证。 EJP,由于您“看不到代理设置有什么不同”,因此代理返回 HTML,表明您不允许通过...以纯文本形式,这会导致 OP 出现错误。
【解决方案2】:

在我的连接被复杂的防火墙规则阻止之前,我遇到了这个错误。如果你有它可能值得看一下配置。

【讨论】:

  • 不可能。如果您的连接被阻止,您将不会收到任何消息,更不用说无法识别的消息了。
【解决方案3】:

您可能正在使用代理来获取 ssl 内容,但您的代理设置错误。您应该考虑使用 http 作为代理方案,然后将 https 作为实际内容的方案。这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-28
    • 2016-08-04
    • 2014-08-08
    • 2016-08-09
    • 1970-01-01
    • 2014-02-04
    • 2017-09-09
    • 2011-09-25
    相关资源
    最近更新 更多