我有一个常见的用例来实现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.and Client项目中的web.config中的配置足以完成所有这些工作?
我通过以下代码项目及其工作正常 . http://www.codeproject.com/Articles/36683/simple-steps-to-enable-X-certificates-on-WCF
我的源代码(Visual Studio项目)包含两个证书,可在Bitbucket上获取download here
任何人都可以告诉我,我是否需要在代码中完成所有这些工作或通过我当前的配置完成 .
提前致谢 .
3 回答
我从MSDN论坛得到以下答案 .
如果我们已将服务配置为在配置文件中使用证书身份验证,那么正如您所说,所有响应和请求消息将由客户端证书的私钥/公钥和服务证书的私钥/公钥加密/解密 . 所以在我看来,配置文件中的所有内容就足够了 .
有关详细信息,请尝试参考以下文章:
Certificate authentication:
https://msdn.microsoft.com/en-us/library/ff648360.aspx .
Message and Transport Security:
https://msdn.microsoft.com/en-us/library/ff648863.aspx .
我还有几个问题,可能是任何人都可以回答我的问题 .
我有多个客户端(外部Web应用程序)将访问我的服务 . 每个客户都需要创建自己的证书吗?客户端将提供没有私钥的证书,需要在Service Host服务器上安装吗?这是正确的方法吗?
需要在web.config中配置每个客户端证书吗?
我需要在没有私钥的情况下导出我的服务证书并发送给客户 . 客户端必须在其应用服务器上安装和配置证书吗?它是否正确?
在这里,我得到了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-encrypted?forum=wcf&prof=required