2008-11-11 57 views
6

我的WCF服务涉及在客户端和服务之间发送数据集(采用csv格式)数据。该数据集必须加密,以便数据不会被拦截。我使用的WSHttpBinding,并试图通过在web.config中使用以下设置到消息加密:WCF - 如何加密邮件?

<wsHttpBinding> 
    <binding name="wsHttp"> 
    <reliableSession enabled="true" /> 
    <security mode="Message"> 
     <message clientCredentialType="UserName" algorithmSuite="TripleDes" /> 
    </security> 
    </binding> 
</wsHttpBinding> 

当我尝试并生成客户端代理,我得到一个长的错误消息框(不能因为它完全读离开屏幕底部!)。该错误消息确实提到了有关“未提供服务证书”的内容。

如何加密邮件?我需要证书吗?我要指出,这项服务将通过互联网从不同的域使用,所以我不知道是否使用“用户名”安全是最好的选择(?)

基本上我很困惑!

回答

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 

...简单地用有意义的为您服务的任何证书的名称替换主题名称

+0

链接不再有效... – LamonteCristo 2011-04-08 04:58:12

4

@Martin是对的,你需要在服务器上的证书。 This link对基于消息的安全性的通信流程有很好的概述并且有示例代码。 This link对使用​​证书有很好的概述。

为了您authenication要求,this link回顾了各种可用的选项。如果您是WCF的新手,学习WCF:Michele Bustamante的动手指南是一本很好的书,它涵盖了基于消息的安全性。

1

我仍在试图找到解决这个问题的方法。我也有,但签署了一个XML。仍然可以在WinXP开始>右键点击我的电脑>管理>服务和应用程序>服务> IIS管理>双击并在登录选项卡它通常会说本地系统找到用户IIS。

编辑

OK,这是我如何解决我的问题。我有一个证书,我用这个article 来证明。如果项目是保存到C文件夹中的ASPWebSite,则可能没有问题。但是,如果它作为HTTP项目保存到IIS,那么您将遇到问题。

经过几周的调查,解决问题的方法并不难。微软有一种叫做Web Services Enhancements的东西,你会下载最新版本,但我正在使用最新的Service Pack。当我安装我启用了一切。

证书可以位于物理文件中,但通常位于证书管理存储中,以便使用WSE 2.0中的工具X509证书工具。这里通过在不同的部分查找证书直到找到证书为止。然后打开它,在底部会有一个View Private Key,在安全选项卡中添加LOCALHOST \ ASPNET。这应该使您的网站能够读取证书。

总之,当你创建公钥和私钥时,尽管你可能会看到私钥没问题,但它确实发送给文件系统中的Timbuktu,你需要找到它来添加ASPNET帐户用于读取访问。我阅读比Vista更容易,但我使用XP。