【问题标题】:NServiceBus: Message level encryptionNServiceBus:消息级加密
【发布时间】:2010-11-17 19:20:59
【问题描述】:

我要求所有消息的内容必须以某种方式加密。对于实际的加密,我可能可以利用内置的 X.509 加密。

但是,我想知道进行消息级加密的最佳方法是什么,而不必修改消息本身(所以没有WireEncryptedString)。我可以看到正在开发的最新版本将以IMutateOutgoingMessagesIMutateIncomingMessagesIMapOutgoingTransportMessages 的形式对此提供更多支持。特别是最后一个很有趣,因为它通过了Stream,我将能够对其进行全部加密(对吗?)。我已经看到这种方法使用了here,他正确地提到没有IMapIncomingTransportMessages,那么我将如何在不修改 NServiceBus 代码的情况下在接收端解密加密消息,或者这是目前唯一的选择充实吗?

但是,这是 NServiceBus 的未来版本,我认为现在在生产场景中使用它不是一个好主意。我将如何在 2.0 中执行此操作?对我来说,最好的方法似乎是编写一个自定义的EncryptedSerializer,它在IMessageSerializer 中传递,基本上只是包装了IMessageSerializerSerializeDeserialize 方法。

我目前拥有的:

public class EncryptedSerializer : IMessageSerializer
{
  [Inject]
  public MessageSerializer Serializer { get; set; }

  public IMessage[] Deserialize(System.IO.Stream stream)
  {
    // decrypt magic happens here
    return Serializer.Deserialize(stream);
  }

  public void Serialize(IMessage[] messages, System.IO.Stream stream)
  {
    Serializer.Serialize(messages, stream);
    // encrypt magic happens here
  }
}

但我不知道如何设置 NServiceBus 配置,它在正确配置/注入的 XmlSerializer 中传递。我查看了.XmlSerializer() 扩展方法并尝试复制它,但没有运气。理想情况下,我希望只使用一个 IMessageSerializer 而不是具体的 XML 序列化程序,但这不太重要。

我从这里使用 Ninject 和 Ninject 对象构建器用于 NServiceBus:gist.github.com/326321。但我不确定这是否重要。

【问题讨论】:

    标签: c# .net encryption nservicebus


    【解决方案1】:

    如果您愿意放弃将另一个消息序列化程序注入到您自己的序列化程序中,而只是包装具体的 XML 序列化程序,那会更容易。您还需要公开其他属性(XML 序列化程序上的属性),然后通过这些属性。

    我知道这不是特别优雅,这就是为什么我们要在下一版本中改进可扩展性故事,以便您插入加密而不用摆弄序列化程序。

    话虽如此,您可能不需要在所有端点之间加密,而只需要在 LAN 外部通信的端点之间加密。对于这些情况,您可以使用 NServiceBus 附带的网关进程,该进程启用基于 HTTP 的通信,然后可以将其配置为通过 HTTPS。此解决方案需要较少的编码,但会在您的部署中涉及另一个过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 2016-03-21
      • 2014-05-14
      • 2013-10-01
      相关资源
      最近更新 更多