WCF - 我该如何加密消息?

6

我的WCF服务涉及在客户端和服务之间发送一个数据集(以csv格式)的数据。这个数据集必须加密,以防止数据被拦截。我正在使用wshttpbinding,并尝试通过在web.config中使用以下设置来加密消息:

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

当我尝试生成客户端代理时,会弹出一个长的错误消息框(由于超出屏幕底部,不完全可读!)。错误消息提到了“未提供服务证书”的内容。
如何加密信息?我需要证书吗?值得一提的是,此服务将在不同域之间通过互联网使用,所以我不确定是否使用“用户名”安全选项是最佳选择(?)
基本上我很困惑!
3个回答

4
是的,您的服务需要证书才能安全地交换加密密钥。您可以使用makecert.exe创建一个测试服务身份验证证书。有关详细信息,请参见我博客中的这篇文章
您还需要确保运行服务的帐户能够读取证书的私钥文件。如果您使用的是Windows Vista(或更高版本),则Certificates 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

只需将主题名称替换为适合您服务的任何证书名称即可。


我已经更改了链接,现在它指向来自archive.org的可运行版本的博客。 - svick

4
@Martin是正确的,服务器需要一个证书。这个链接提供了消息安全通信流程的概述和示例代码:This link。这个链接提供了有关证书操作的概述:This link
对于您的认证需求,this link回顾了各种可用选项。如果您是WCF新手,《Learning WCF: A Hands-on Guide》(作者Michele Bustamante)是一本不错的书,涵盖了消息安全方面的内容。

1

我仍在尝试找到解决这个问题的方法。我也遇到了这个问题,但是与签署xml有关。仍在寻找运行WinXP的IIS用户,可以通过开始 > 右键单击我的电脑 > 管理 > 服务和应用程序 > 服务 > IIS管理员 > 双击,在登录选项卡中通常会显示本地系统。

编辑

好的,这就是我解决问题的方法。我有一个证书,我使用article来制作该证书。如果项目是保存在C文件夹中的ASPWebSite,则可能不会出现此问题。但是,如果将其保存为HTTP项目并保存到IIS,则会出现问题。

经过数周的调查后,解决方法并不难。微软有一个称为Web Services Enhancements的东西,您将下载最新版本,但我正在使用带有最新服务包的第二个版本。安装时我启用了所有功能。

证书可以存在物理文件中,但通常存储在证书管理存储中。要访问它,请使用 WSE 2.0 中的 X509 证书工具。在此打开您的证书,通过查找不同的部分找到它,然后打开它,在底部将会有一个“查看私钥”选项,在安全选项卡中添加 LOCALHOST\ASPNET。这样应该可以使您的网站读取证书。

简而言之,当您创建公钥和私钥时,尽管您可能可以很好地看到私钥,但实际上它被发送到文件系统中的 Timbuktu,您需要找到它以添加 ASPNET 帐户以进行读取访问。我了解到在 Vista 中这要容易得多,但我正在使用 XP。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接