簡體   English   中英

NServiceBus:消息級別加密

[英]NServiceBus: Message level encryption

我要求所有消息的內容必須以某種方式加密。 對於實際的加密,我可能可以利用內置的X.509加密。

但是,我想知道進行消息級加密的最佳方法是什么,而不必修改消息本身(因此不需要WireEncryptedString )。 我可以看到開發中的最新版本將以IMutateOutgoingMessagesIMutateIncomingMessagesIMapOutgoingTransportMessages的形式對此提供更多支持。 尤其是最后一個很有趣,因為它通過了一個Stream ,我將能夠對其進行整體加密(對嗎?)。 我已經看到了這個方法使用在這里 ,他正確地提到,沒有IMapIncomingTransportMessages ,所以我將如何去接收方解密加密的消息,而無需修改代碼NServiceBus,或者是當前,直到唯一的選擇得到充實?

但是,那是NServiceBus的未來版本,我認為現在在生產場景中使用它不是一個好主意。 我將如何在2.0中做到這一點? 對我來說,最好的辦法似乎是編寫自定義EncryptedSerializer是被傳入IMessageSerializer ,基本上只是包裝的SerializeDeserialize該方法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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM