我的WCF服务涉及在客户端和服务之间发送数据集(以csv格式)数据。必须对此数据集进行加密,以便无法拦截数据。我正在使用wshttpbinding并尝试使用web.config中的以下设置加密消息:
<wsHttpBinding>
<binding name="wsHttp">
<reliableSession enabled="true" />
<security mode="Message">
<message clientCredentialType="UserName" algorithmSuite="TripleDes" />
</security>
</binding>
</wsHttpBinding>
当我尝试生成一个客户端代理时,我得到一个很长的错误消息框(由于它离开了屏幕的底部,因此无法完全读取!)。错误消息确实提到了“未提供服务证书”。
如何加密邮件?我需要证书吗?我应该提一下,这项服务将在不同领域的互联网上使用,所以我不确定使用“用户名”安全性是否是最佳选择(?)
基本上我很困惑!
答案 0 :(得分:4)
是的,您的服务需要证书才能安全地交换加密密钥。您可以使用makecert.exe创建测试服务身份验证证书。有关详细信息,请参阅this entry in my blog。
您还需要确保您的服务正在运行的帐户能够读取证书的私钥文件。如果您使用的是Windows Vista(或更高版本),则证书MMC管理单元允许您控制该私钥的权限,但对于早期版本的Windows,它有点难度。我曾经使用WSE3附带的实用程序,但其他人可能能够建议更直接的方式。除非您的服务以管理员身份运行,否则您很可能必须调整这些权限。
更新:像所有好东西一样,我的博客结束了。感谢makerofthings7提醒我。您需要生成服务身份验证证书的makecert命令是这样的......
makecert -sr LocalMachine -ss My -pe -n CN=subject-name -eku 1.3.6.1.5.5.7.3.1 -sky exchange
...只需将使用者名称替换为对您的服务有意义的任何证书名称。
答案 1 :(得分:4)
@Martin是对的,您需要服务器上的证书。 This link可以很好地概述基于消息的安全性的通信流程,并提供示例代码。 This link对使用证书有很好的概述。
对于您的身份验证要求,this link会审核各种可用选项。如果您是WCF的新手,学习WCF:Michele Bustamante的动手指南是一本好书,涵盖了基于消息的安全性。
答案 2 :(得分:1)
我仍在努力找到解决这个问题的方法。我也有,但签署了一个xml。还是要找到用户IIS在WinXP中运行的开始&gt;右键单击我的电脑&gt;管理&gt;服务和应用&gt;服务&gt; IIS管理员&gt;双击并在“登录”选项卡中,它通常会显示“本地系统”。
修改
好的,这就是我解决问题的方法。我有一个ceritificate,我使用了这个article 制作证书。如果项目是保存到C文件夹的ASPWebSite,则可能没有问题。但如果它作为HTTP项目保存到IIS,那么你将遇到问题。
经过数周的调查后解决问题的方法并不难。微软有一个称为Web服务增强功能的东西,你将下载最新的,但我正在使用第二个与最新的服务包。当我安装时,我启用了所有内容。
证书可以位于物理文件中,但它们通常位于证书管理存储中,以便使用WSE 2.0中的工具X509证书工具。在这里打开您的证书,在不同的部分查找它,直到找到它。然后打开它,在底部会有一个View Private Key,在安全选项卡中添加LOCALHOST \ ASPNET。这应该使您的网站能够阅读证书。
简而言之,当您创建公钥和私钥时,虽然您可能会看到私钥很好,但它确实是在文件系统中发送给Timbuktu而您需要找到它来添加ASPNET帐户读取权限。我在阅读比在Vista中更容易,但我正在使用XP。