我有以下情况 - 我调用远程服务,从我的 WCF 客户端用 Java 编写。此服务具有基于证书的身份验证,使用 SSL,并以 JKS 格式向所有客户端提供证书。我将此证书转换为 P12 格式并调用服务。 Сall 没有引发异常,但返回空结果。
客户端代理是从服务 WSDL 生成的。这是我的配置:
<?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="ClientEndPointBehavior">
<clientCredentials>
<clientCertificate storeLocation="CurrentUser" storeName="My" x509FindType="FindBySerialNumber" findValue="01234567"/>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="MyBinding" allowCookies="true">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://myservice/services/"
binding="basicHttpBinding" bindingConfiguration="MyBinding"
contract="IContract" name="Contract" behaviorConfiguration="ClientEndPointBehavior"/>
</client>
</system.serviceModel>
</configuration>
我做错了什么?
最佳答案
您必须使用 CustomBinding 才能与 Java 客户端或服务进行互操作。您可以根据您的身份验证模式尝试以下任何绑定(bind)。
<customBinding>
<binding name="bindingName">
<textMessageEncoding messageVersion="Soap11" />
<httpsTransport authenticationScheme="Anonymous"
requireClientCertificate="true" />
</binding>
为上述尝试不同的身份验证方案
或
<customBinding>
<binding name="bindingName">
<textMessageEncoding messageVersion="Soap11" />
<security authenticationMode="CertificateOverTransport" />
<httpsTransport requireClientCertificate="true"/>
</binding>
请引用link对于 authenticationMode 的不同选项
希望对你有帮助
关于WCF + SSL,获取方法调用的空结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23469777/