Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有签名和加密功能的WCF客户端+;带有四个证书的HTTPS_Wcf_Soap_Certificate_Interop_Ws Security - Fatal编程技术网

具有签名和加密功能的WCF客户端+;带有四个证书的HTTPS

具有签名和加密功能的WCF客户端+;带有四个证书的HTTPS,wcf,soap,certificate,interop,ws-security,Wcf,Soap,Certificate,Interop,Ws Security,我必须为一个可能用Java编写的外部SOAPWeb服务创建一个WCF客户端。该web服务使用WS-Security进行签名和加密(因此,我想我必须使用WCF消息级安全性)。客户端和web服务之间的传输机制是带有双向握手的HTTPS 问题是我必须使用四种不同的证书-让我们称它们为CertA,CertB,CertC和CertD CertA和CertC必须用于对SOAP消息进行签名 CertB和CertD必须用于SOAP消息加密和HTTPS握手 基本上,客户机应该使用其私钥对消息进行签名,并使用服

我必须为一个可能用Java编写的外部SOAPWeb服务创建一个WCF客户端。该web服务使用WS-Security进行签名和加密(因此,我想我必须使用WCF消息级安全性)。客户端和web服务之间的传输机制是带有双向握手的HTTPS

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

  • CertACertC必须用于对SOAP消息进行签名
  • CertBCertD必须用于SOAP消息加密和HTTPS握手
基本上,客户机应该使用其私钥对消息进行签名,并使用服务器的公钥对消息进行加密。服务器的作用正好相反

准确地说,为了向服务器发送消息并接收响应,WCF客户端必须执行以下操作:

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

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

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

  • 在服务器端:

  • 服务器接收消息,对客户端进行身份验证和授权
  • 服务器使用证书的私钥解密消息
  • 服务器使用证书的公钥验证消息签名。服务器然后处理解密和验证的消息
  • 服务器创建响应消息,并使用证书CertC对其进行签名(使用CertC的私钥)
  • 服务器使用certificateCertB对响应消息进行加密(使用CertB的公钥)
  • 服务器通过HTTPS传输将响应发送回客户端
  • 当客户端收到服务器响应时:

  • 客户端使用其证书b的私钥解密响应
  • 客户端使用CertC的公钥验证消息签名
  • 客户端处理响应
  • 问题是如何配置这样的WCF客户端?要使用哪个绑定在消息层启用SOAP签名和加密+在传输层启用HTTPS双向握手,以及如何“告诉”WCF这4个证书各自的用途

    (是的,我已经看过这篇文章了:但我担心这篇文章没有为我的案例提供解决方案,因为他们使用了一些奇怪的双工绑定,需要客户端打开一个侦听端口,而这对我来说不是一个选项,因为我必须使用常规的HTTPS连接)