【发布时间】:2010-11-17 19:20:59
【问题描述】:
我要求所有消息的内容必须以某种方式加密。对于实际的加密,我可能可以利用内置的 X.509 加密。
但是,我想知道进行消息级加密的最佳方法是什么,而不必修改消息本身(所以没有WireEncryptedString)。我可以看到正在开发的最新版本将以IMutateOutgoingMessages、IMutateIncomingMessages 和IMapOutgoingTransportMessages 的形式对此提供更多支持。特别是最后一个很有趣,因为它通过了Stream,我将能够对其进行全部加密(对吗?)。我已经看到这种方法使用了here,他正确地提到没有IMapIncomingTransportMessages,那么我将如何在不修改 NServiceBus 代码的情况下在接收端解密加密消息,或者这是目前唯一的选择充实吗?
但是,这是 NServiceBus 的未来版本,我认为现在在生产场景中使用它不是一个好主意。我将如何在 2.0 中执行此操作?对我来说,最好的方法似乎是编写一个自定义的EncryptedSerializer,它在IMessageSerializer 中传递,基本上只是包装了IMessageSerializer 的Serialize 和Deserialize 方法。
我目前拥有的:
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