带有 WCF 客户端的 Java JAX-WS 服务

Posted

技术标签:

【中文标题】带有 WCF 客户端的 Java JAX-WS 服务【英文标题】:Java JAX-WS Service with WCF Client 【发布时间】:2011-05-05 21:22:54 【问题描述】:

是否可以使用 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>

一切都完美无缺。任何想法我做错了什么?

【问题讨论】:

【参考方案1】:

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

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

将其更改为 Transport 后,仅应用传输安全性(使用证书的 SSL),因此客户端和服务都可以了解如何相互通信。

干杯。

【讨论】:

【参考方案2】:

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

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

如果您在传输元素中定义证书凭据类型,您会说:我想要双向 SSL 身份验证。实际上,如果您定义 TransportWithMessageCredential,我不确定是否使用它

【讨论】:

【参考方案3】:

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

PS:如果您想继续使用 https 内容类型“text/xml”soap 11(来自 jaxws 的默认值),请使用“basichttps”绑定

【讨论】:

以上是关于带有 WCF 客户端的 Java JAX-WS 服务的主要内容,如果未能解决你的问题,请参考以下文章

xml 转储jax-ws客户端的SOAP消息

如何以编程方式设置 JAX-WS 客户端的 SSLContext?

apache cxf的jax-rs和jax-ws的区别

带有 Axis 服务的 JAX-WS 客户端

为 JAX-RPC Web 服务生成 JAX-WS 客户端存根?

一步一步搭建客服系统 客户列表 - JS($.ajax)调用WCF 遇到的各种坑