【问题标题】:Calling Java SOAP 1.1 Service by WCF ClientWCF 客户端调用 Java SOAP 1.1 服务
【发布时间】:2015-09-28 15:14:19
【问题描述】:

为什么用 JAVA 编写的 SOAP1.1 Web 服务可能无法识别 WCF 客户端传递的有效证书?

我们从服务中收到 500 错误,表明该服务不信任我们的证书。这可能与 SOAP 标准的 WCF 实现与 Java 服务期望看到的不同有关吗?

这是 WCF 配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <system.serviceModel>

    <behaviors>
      <endpointBehaviors>
        <behavior name="ourCert">
          <clientCredentials>
            <clientCertificate x509FindType="FindBySubjectName" findValue="MyCompany"/>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>

    <bindings>
      <customBinding>
        <binding name="wsHttpSoap11" >
          <textMessageEncoding messageVersion="Soap11" />
          <httpsTransport requireClientCertificate="true" />
        </binding>
      </customBinding>
    </bindings>

    <client>
      <endpoint address="https://{site}.com/site.wsdl"
                binding="customBinding"
                behaviorConfiguration="ourCert"
                bindingConfiguration="wsHttpSoap11"
                contract="ServiceContract">
      </endpoint>
    </client>

  </system.serviceModel>

  <system.net>
    <defaultProxy useDefaultCredentials="true" />
  </system.net>

</configuration>

【问题讨论】:

  • 500 仅表示内部服务器错误。您是否有日志显示内部服务器错误是证书信任问题还是假设?
  • 我推荐使用 glassfish metro 生成 java 客户端。它声明与 WCF metro.java.net/guide/ch01.html#ahiar 的兼容性
  • 500 只是他们让我们知道出现问题的方式。我们无法访问服务端的日志,否则不会有问题:)
  • 好的,如果没有可靠的日志记录信息,将很难知道问题出在哪里,除非有人告诉您问题肯定是证书信任问题......在这种情况下,证书需要共享和导入。你可以用 Firefox 下载他们的证书(谷歌这个过程)并在你最后导入它。
  • 没错。我希望在从 WCF 客户端向 Java WS 提供可信证书时存在“已知问题”。 WCF 在支持不同的安全设置组合方面非常灵活,我附加的配置具有最简单的设置之一,可能足够也可能不够。

标签: java c# .net wcf ws-security


【解决方案1】:

证书根据信任链进行验证,因此生成框架不相关。另请注意,您使用传输级证书,因此 SOAP 不太可能成为错误源。

我建议您执行以下操作:

  1. 为该服务构建一个有效的 Java 客户端(使用 openssl 生成证书,或者使用您拥有的 jks 格式的证书)。验证客户端是否正常工作。
  2. 将 jks 证书转换为 pfx 并将其与 WCF 客户端一起使用。 WCF 客户端现在应该也可以工作了。

如果 WCF 仍然失败,则比较 java 和 wcf 客户端生成的传出 SOAP(您可以使用 fiddler 来捕获它)。这可能暗示其他差异(也许您实际上需要消息证书而不是传输,也许您的肥皂版本不匹配等)。

【讨论】:

  • 感谢您 - 但我们无法控制服务端的流程。我们被告知我们的证书受到服务的信任。该问题可能归结为 WCF 客户端和 Java 服务之间的通信错误。只是想知道潜在的问题是什么 - 即误解。 WCF 或其他标准的 WS 标准
  • 在这种情况下创建一个工作的 java 客户端并将其输出与 wcf 输出进行比较
  • 另请注意,如果确实只使用了传输证书,您可以通过向服务器发起 HttpRequest 或 WebClient 来调试此问题(即使在任何soap相关之前,传输级别也会发生错误)
  • 使用 SOAP UI,我们能够通过比较 WCF 和 SOAP UI 生成的 SOAP 消息来识别问题。解决方案是使用 WSE 3.0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多