【发布时间】:2016-08-14 19:31:32
【问题描述】:
我有一个常见的用例来实现一个 Web 服务 (WCF) 和一个使用该 Web 服务的 Web 客户端。客户端和服务都在发送和接收签名和加密消息(消息级别安全性)。
我可以有多个客户端使用我的服务,因此需要在运行服务项目的服务器上安装多个客户端证书。
我在本地机器存储中安装了 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 Client 需要通过自己的 Private Key 对请求消息进行签名,并通过 Service Certificate Public key 对消息进行加密。
服务接收请求并通过客户端公钥验证消息的签名并通过自己的私钥解密内容
然后处理请求并创建响应对象。 现在 Service 必须使用自己的私钥对响应进行签名,并通过客户端公钥对消息进行加密。
现在客户端得到签名和加密的响应。现在它通过服务公钥验证响应并通过自己的私钥解密消息。
这是整个 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 上获得 download here
谁能告诉我,我需要在代码中完成所有这些工作还是通过我当前的配置来完成。
提前致谢。
【问题讨论】:
标签: wcf-security x509 ws-security wshttpbinding makecert