6

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

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

当我尝试生成客户端代理时,我收到一个很长的错误消息框(无法完全阅读,因为它超出了屏幕底部!)。该错误消息确实提到了有关“未提供服务证书”的内容。

如何加密消息?我需要证书吗?我应该提到,这项服务将在不同域的互联网上使用,所以我不确定使用“用户名”安全性是否是最佳选择(?)

基本上我很困惑!

4

3 回答 3

4

是的,您的服务需要证书才能安全地交换您的加密密钥。您可以使用 makecert.exe 创建测试服务身份验证证书。有关详细信息,请参阅我的博客中的此条目

您还需要确保您的服务正在运行的帐户能够读取证书的私钥文件。如果您使用的是 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

...只需将主题名称替换为对您的服务有意义的任何证书名称。

于 2008-11-11T13:38:43.547 回答
4

@Martin 是对的,您需要服务器上的证书。此链接很好地概述了基于消息的安全性的通信流程,并提供了示例代码。此链接很好地概述了使用证书。

对于您的身份验证要求,此链接查看可用的各种选项。如果您是 WCF 新手,那么学习 WCF:Michele Bustamante 的动手指南是一本好书,涵盖了基于消息的安全性。

于 2008-11-11T13:44:24.567 回答
1

我仍在努力寻找解决这个问题的方法。我也有,但要签署一个xml。仍然要在 WinXP 中找到用户 IIS 开始 > 右键单击​​我的电脑 > 管理 > 服务和应用程序 > 服务 > IIS 管理员 > 双击并在登录选项卡中通常会显示本地系统。

编辑

好的,这就是我解决问题的方法。我有一个证书,我使用这篇文章 来制作证书。如果项目是保存到 C 文件夹的 ASPWebSite,则您可能不会遇到此问题。但是,如果它作为 HTTP 项目保存到 IIS,那么您将遇到问题。

经过数周的调查后解决它的方法并不难。Microsoft 有一个叫做 Web Services Enhancements 的东西,您将下载最新的,但我使用的是第二个带有最新服务包的东西。当我安装时,我启用了一切。

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

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

于 2008-12-24T16:29:46.577 回答