使用WCF客户端的Java JAX-WS服务

时间:2010-11-05 23:39:54

标签: wcf web-services jax-ws ws-security

是否可以使用JAX-WS创建WebService,然后使用这样的绑定由WCF客户端使用?

<bindings>
        <basicHttpBinding>
            <binding name="CaseObjectServicePortBinding" >
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="TransportWithMessageCredential">
                    <transport clientCredentialType="Certificate"/>
                    <message clientCredentialType="Certificate" />
                </security>
            </binding>

        </basicHttpBinding>
    </bindings>

我现在创建了一个没有WSIT的服务,只是一个简单的服务,并且想要忽略传入SOAP消息中的“Security”头。但它失败了:

“无法为权限为'xxxxxxxxxx'的SSL / TLS建立安全通道。”

如果我改变:

<security mode="TransportWithMessageCredential">
                    <transport clientCredentialType="Certificate"/>
                    <message clientCredentialType="Certificate" />
                </security>

为:

<security mode="Transport">
                    <transport clientCredentialType="Certificate"/>
                    <message clientCredentialType="Certificate" />
                </security>
一切都完美无瑕。我有什么想法吗?

3 个答案:

答案 0 :(得分:0)

答案是肯定的。您可以使用 BasicHttpBinding或WsHttpBinding

发生错误是因为当您使用 TransportWithMessageCredential 时,WCF客户端将对通过线路发送的消息施加额外的安全性,该线路仅可与WCF服务互操作。

将其更改为传输后,仅应用传输安全性(使用证书的SSL),这样客户端和服务都可以了解彼此之间的通信方式。

干杯。

答案 1 :(得分:0)

将安全性定义为TransportWithMessageCredential时,您说:我想要一个通过安全传输通道(HTTPS)进行通信的服务,我想在SOAP标头中传递客户端凭据。

如果在消息元素中定义证书凭据类型,则说: SOAP标头将客户端凭据作为x.509证书令牌配置文件传输。它是可互操作的格式,需要服务上的WS-Security。

如果您在传输元素中定义Certifiate凭据类型,则说:我想要相互SSL身份验证。如果您定义TransportWithMessageCredential ,我实际上不确定是否使用了该身份验证。

答案 2 :(得分:0)

这发生在发起请求的步骤上;弹出TLS异常,因为客户端上设置的证书不受信任。使用具有公共目的地名称的证书,如果您在公共场所使用该服务,则使用域名,否则使用目标IP地址作为通用名称,它将正常工作。

PS:使用&#39; basichttps&#39;如果您想继续使用https内容类型&#39; text / xml&#39; soap 11是jaxws的默认值