WCF - 如何加密消息?

Cal*_*nus 6 wcf wcf-encryption

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

<wsHttpBinding>
  <binding name="wsHttp">
    <reliableSession enabled="true" /> 
    <security mode="Message">
      <message clientCredentialType="UserName" algorithmSuite="TripleDes" />
    </security>
  </binding>
</wsHttpBinding>
Run Code Online (Sandbox Code Playgroud)

当我尝试生成客户端代理时,我得到一个很长的错误消息框(无法完全读取,因为它离开了屏幕的底部!).错误消息确实提到了"未提供服务证书"的问题.

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

基本上我很困惑!

Mar*_*tin 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
Run Code Online (Sandbox Code Playgroud)

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