0

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

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

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

makecert -sr LocalMachine -ss 我的 -a sha1 -n "CN=WCFServer" -len 2048 -sky exchange -pe

makecert -sr LocalMachine -ss 我的 -a sha1 -n "CN=WCFClient" -len 2048 -sky exchange -pe

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

Web Client 需要通过自己的 Private Key 对请求消息进行签名,并通过 Service Certificate Public key 对消息进行加密。

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

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

现在客户端得到签名和加密响应。现在它通过服务公钥验证响应并通过自己的私钥解密消息。

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

我正在使用[ServiceContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]ServuceContract 和[OperationContract(ProtectionLevel = ProtectionLevel.EncryptAndSign, IsOneWay = false)]OperationContract。

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

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

包含两个证书的我的源代码(Visual Studio 项目)可在 Bitbucket 上下载,可在此处下载

谁能告诉我,我需要在代码中完成所有这些事情还是通过我当前的配置来完成。

提前致谢。

4

3 回答 3

0

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

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

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

欲了解更多信息,请尝试参考以下文章:

证书认证:

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

消息和传输安全:

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

于 2016-04-27T07:48:22.597 回答
0

在这里,我从 MSDN 团队得到了另一个很好的答案(分步指南)。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/a9d85e9f-6d35-425c-ac6d-b3cd883760e4/wcf-message-level-security-using-certificate-x509-message-signed-and-加密?forum=wcf&prof=必填

于 2016-04-29T08:58:36.910 回答
0

我还有几个问题可能任何人都可以回答我。

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

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

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

于 2016-04-27T07:51:01.113 回答