通过WCF客户端调用Java SOAP 1.1服务

时间:2015-09-28 15:14:20

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

为什么用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>

1 个答案:

答案 0 :(得分:1)

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

我建议你做以下事情:

  1. 为此服务构建一个可用的java客户端(使用openssl生成证书或使用jks格式的证书)。验证客户端是否正常工作。
  2. 将jks证书转换为pfx并将其与WCF客户端一起使用。 WCF客户端现在也应该正常工作。
  3. 如果WCF仍然失败,那么比较java和wcf客户端生成的传出SOAP(您可以使用fiddler捕获它)。这可能暗示其他差异(也许你实际上需要一个消息证书而不是传输,也许你的肥皂版本不匹配等)。