![](/img/trans.png)
[英]NserviceBus 6.x message pipeline scenario based on transport transaction level
[英]NServiceBus: Message level encryption
我要求所有消息的內容必須以某種方式加密。 對於實際的加密,我可能可以利用內置的X.509加密。
但是,我想知道進行消息級加密的最佳方法是什么,而不必修改消息本身(因此不需要WireEncryptedString
)。 我可以看到開發中的最新版本將以IMutateOutgoingMessages
, IMutateIncomingMessages
和IMapOutgoingTransportMessages
的形式對此提供更多支持。 尤其是最后一個很有趣,因為它通過了一個Stream
,我將能夠對其進行整體加密(對嗎?)。 我已經看到了這個方法使用在這里 ,他正確地提到,沒有IMapIncomingTransportMessages
,所以我將如何去接收方解密加密的消息,而無需修改代碼NServiceBus,或者是當前,直到唯一的選擇得到充實?
但是,那是NServiceBus的未來版本,我認為現在在生產場景中使用它不是一個好主意。 我將如何在2.0中做到這一點? 對我來說,最好的辦法似乎是編寫自定義EncryptedSerializer
是被傳入IMessageSerializer
,基本上只是包裝的Serialize
和Deserialize
該方法IMessageSerializer
。
我目前所擁有的:
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。 但是我不確定這是否重要。
如果您願意放棄將另一個消息序列化器注入到自己的序列化器中,而只包裝具體的XML序列化器,則會更容易。 您還需要公開其他屬性(XML序列化程序上的屬性),然后傳遞這些屬性。
我知道這不是特別優雅,這就是為什么我們在下一版本中改進了可擴展性故事,以使您可以插入加密而不必煩惱串行器。
綜上所述,您可能不需要在所有端點之間進行加密,而僅需要在LAN外部進行通信的端點之間進行加密。 對於這些情況,您可以使用NServiceBus附帶的網關進程,該進程啟用基於HTTP的通信,然后可以將其配置為通過HTTPS。 此解決方案將需要較少的編碼,但會在您的部署中涉及另一個過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.