J'ai l'exigence que le contenu de tous les messages doit être crypté d'une manière ou d'une autre. Pour le chiffrement réel, je peux probablement tirer parti du cryptage X.509 intégré.NServiceBus: cryptage au niveau du message
Cependant, je me demande quelle est la meilleure façon de faire un chiffrement de niveau message, sans avoir à modifier les messages eux-mêmes (donc pas WireEncryptedString
). Je peux voir que la dernière version en développement offrira un peu plus de soutien pour cela sous la forme de IMutateOutgoingMessages
, IMutateIncomingMessages
et IMapOutgoingTransportMessages
. Surtout le dernier est intéressant car il se passe un Stream
que je vais pouvoir crypter dans son intégralité (pas vrai?). J'ai vu cette approche utilisée here et il mentionne correctement qu'il n'y a pas de IMapIncomingTransportMessages
, alors comment pourrais-je décrypter le message crypté du côté réception sans modifier le code NServiceBus, ou est-ce actuellement la seule option jusqu'à ce que cela soit étoffé?
Cependant, c'est la future version de NServiceBus et je ne pense pas que ce soit une bonne idée de l'utiliser dans un scénario de production pour le moment. Comment ferais-je cela en 2.0? Pour moi, la meilleure façon semble être d'écrire un EncryptedSerializer
personnalisé qui est passé en IMessageSerializer
et fondamentalement juste enveloppe les méthodes Serialize
et Deserialize
de ce IMessageSerializer
.
Ce que j'ai actuellement:
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
}
}
Mais je ne peux pas comprendre comment configurer la configuration NServiceBus qu'il est transmis dans un XmlSerializer qui est correctement configuré/injecté ainsi. J'ai regardé la méthode d'extension .XmlSerializer()
et essayé de reproduire cela, mais sans succès. Et idéalement, je voudrais avoir juste un IMessageSerializer
au lieu du sérialiseur XML concret, mais c'est moins inquiétant.
J'utilise Ninject et le générateur d'objet Ninject pour NServiceBus à partir d'ici: gist.github.com/326321. Mais je ne suis pas sûr que ce soit important.