使用证书的WCF消息级安全性(X.509)已签名和加密的消息

时间:2016-04-21 14:13:30

标签: wcf-security x509 ws-security wshttpbinding makecert

我有一个常见的用例来实现Web服务(WCF)和使用此Web服务的Web客户端。客户端和服务都在发送和接收签名和加密消息(消息级安全性)。

我可以拥有多个使用我服务的客户端,因此需要在运行Service项目的服务器上安装多个客户端证书。

我已在个人和受信任的根证书颁发机构下的本地计算机商店中安装了2个证书(服务证书和客户端证书)。

  

makecert -sr LocalMachine -ss My -a sha1 -n“CN = WCFServer”-len 2048 -sky exchange -pe

     

makecert -sr LocalMachine -ss My -a sha1 -n“CN = WCFClient”-len 2048 -sky exchange -pe

虽然证书给我错误“无法保证许可证的完整性”,但现在我不关心这个问题。

Web客户端需要通过自己的私钥和加密消息通过服务证书公钥对请求消息进行签名。

服务接收请求并通过客户端公钥验证消息签名并通过自己的私钥解密内容

处理请求并创建响应对象。 现在,服务必须通过自己的私钥对响应进行签名,并通过客户端公钥加密消息。

现在客户端获得Signed和Encrpted响应。现在,它通过服务公钥验证响应,并通过自己的私钥解密消息。

这是整个Szenerio。我在本地开发机器上安装了(客户端和服务)X.509证书。我正在使用wsHttpBinding,沟通工作正常。

我将[ServiceContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]用于ServuceContract,[OperationContract(ProtectionLevel = ProtectionLevel.EncryptAndSign, IsOneWay = false)]用于OperationContract。

我有以下问题: 我需要在我的代码中签名和加密/解密请求或响应消息(一次在客户端,一次在服务代码中)或Service Project和Client项目中的web.config中的配置是否足以完成所有这些工作?

我通过以下代码项目及其工作正常。 http://www.codeproject.com/Articles/36683/simple-steps-to-enable-X-certificates-on-WCF

我的源代码(Visual Studio项目)Bitbucket上提供了包含这两个证书的download here

任何人都可以告诉我,我是否需要在代码中完成所有这些工作,或者通过我当前的配置来完成。

提前致谢。

3 个答案:

答案 0 :(得分:0)

我从MSDN论坛得到以下答案。

  

我需要在我的代码中签名和加密/解密请求或响应消息(一次在客户端,一次在服务代码中)或Service Project和Client项目中的web.config中的配置是否足以完成所有这些工作?< / p>

如果我们已将服务配置为在配置文件中使用证书身份验证,那么正如您所说,所有响应和请求消息将由客户端证书的私钥/公钥和服务证书的私钥/公共加密/解密键。所以在我看来,配置文件中的所有内容就足够了。

有关详细信息,请参阅以下文章:

证书身份验证:

https://msdn.microsoft.com/en-us/library/ff648360.aspx

消息和传输安全:

https://msdn.microsoft.com/en-us/library/ff648863.aspx

答案 1 :(得分:0)

我还有一些问题,可能是任何人都可以回答我。

  1. 我有多个客户端(外部网络应用程序)可以访问我的服务。每个客户都需要创建自己的证书吗?客户端将提供没有私钥的证书,需要在Service Host服务器上安装吗?这是正确的方法吗?

  2. 需要在web.config中配置每个客户端证书吗?

  3. 我需要在没有私钥的情况下导出我的服务证书并发送给客户。客户端必须在其应用服务器上安装和配置证书吗?这是对的吗?

答案 2 :(得分:0)