没有身份验证/授权或证书的WCF邮件加密

时间:2011-06-06 12:39:51

标签: .net wcf encryption

我有一个带有两个模块的.NET 4.0项目,它们将通过WCF服务进行通信,我想实现一个自定义加密机制。

我的情景:

  • 我控制两个端点(客户端和服务器)但不控制它们之间的连接

  • Windows auth是不可能的,因为此时我不知道哪些模块将被部署,并且很可能它们将位于不同的域

  • 我想在某些时候截取消息并使用一个密钥来自定义加密/解密,该密钥将在服务器和客户端上正确配置,因此如果有人设法拦截消息,他们就不会无法解密。

  • 我想使用二进制序列化交换数据

  • 我不想处理在客户端或服务器端设置证书

有人能指出使用WCF实现这种情况最明显的解决方案吗?

1 个答案:

答案 0 :(得分:2)

我会说你不想要安全性 - 使用对称加密算法加密消息的静态密钥只是一个安全概念。

无论如何,如果你想这样做,确实有一些扩展点可以让你在很多不同的层面上做到这一点。

  • 加密整个邮件 - 这需要自定义邮件编码器,这可能很难写。
  • 加密邮件正文 - 您可以编写自定义IMessageInspector,它将处理邮件正文的加密和解密。除非您想在WCF处理中更改许多其他内容,否则标题仍将是纯文本格式。您可以将检查器包装在自定义IEndpointBehavior中,并在代码中强制使用它或在配置中以声明方式使用它(您还需要实现自定义BehaviorExtenxionElement)。
  • 仅加密一些标有自定义IOperationBehavior的操作或一些标有IContractBehavior行为的数据,并使用IParameterInspector解密和加密值。

您可以控制客户端和服务器 - 使用证书而不是虚假安全。