我必须为一个可能用Java编写的外部SOAP Web服务创建一个WCF客户端 . 该Web服务使用 WS-Security 进行签名和加密(因此,我想我必须使用WCF消息级安全性) . 客户端和Web服务之间的传输机制是 HTTPS with 2-way handshaking .

问题是我必须使用四种不同的证书 - 让我们称它们为 CertACertBCertCCertD .

  • CertACertC 必须用于签名SOAP消息 .

  • CertBCertD 必须用于SOAP消息加密和HTTPS握手 .

基本上,客户端应该使用它的私钥对消息进行签名,并使用服务器的公钥对消息进行加密 . 服务器正好相反 .

确切地说,这是WCF客户端为了向服务器发送消息并接收响应而必须做的事情:

  • 客户端使用证书 CertA 签署SOAP请求(使用CertA的私钥)

  • 客户端使用证书 CertD 加密SOAP请求(使用CertD的公钥)

  • 客户端通过HTTPS将签名和加密的SOAP消息发送到服务器(在HTTPS双向握手期间服务器需要证书 CertB 以进行身份验证)

在服务器端:

  • 服务器接收消息,验证并授权客户端

  • 服务器使用 CertD 的私钥解密消息

  • 服务器使用 CertA 的公钥验证邮件签名 . 然后,服务器处理解密和验证的消息 .

  • 服务器创建响应消息并使用证书 CertC 进行签名(使用CertC的私钥)

  • Server使用证书 CertB (使用CertB的公钥)加密响应消息

  • 服务器通过HTTPS传输将响应发送回客户端 .

当客户端收到服务器响应时:

  • 客户端使用 CertB 的私钥解密响应

  • 客户端使用 CertC 的公钥验证邮件签名

  • 客户端处理响应 .

问题是如何配置这样的WCF客户端?哪个绑定用于在消息层上启用SOAP签名和加密HTTPS传输层上的双向握手以及如何"tell" WCF 4个证书的目的是什么?

(是的,我已经看过这篇文章了:https://msdn.microsoft.com/en-us/library/ms729856(v=vs.110).aspx但是我'm afraid that article doesn' t为我的案例提供了解决方案,因为他们使用了一些奇怪的双工绑定,这需要客户端打开一个监听端口,这对我来说不是一个选项,因为我必须使用常规的HTTPS连接) .