我有一个常见的用例来实现一个 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 上下载,可在此处下载
谁能告诉我,我需要在代码中完成所有这些事情还是通过我当前的配置来完成。
提前致谢。