我必须为一个可能用Java编写的外部SOAP Web服务创建一个WCF客户端 . 该Web服务使用 WS-Security 进行签名和加密(因此,我想我必须使用WCF消息级安全性) . 客户端和Web服务之间的传输机制是 HTTPS with 2-way handshaking .
问题是我必须使用四种不同的证书 - 让我们称它们为 CertA , CertB , CertC 和 CertD .
-
CertA 和 CertC 必须用于签名SOAP消息 .
-
CertB 和 CertD 必须用于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连接) .