У меня есть требование, чтобы содержимое всех сообщений было каким-то образом зашифровано. Для фактического шифрования я, вероятно, могу использовать встроенное шифрование X.509.NServiceBus: шифрование уровня сообщений
Тем не менее, мне интересно, как лучше всего использовать шифрование на уровне сообщений, без необходимости изменять сами сообщения (так что нет WireEncryptedString
). Я вижу, что последняя версия в разработке предложит дополнительную поддержку для этого в виде IMutateOutgoingMessages
, IMutateIncomingMessages
и IMapOutgoingTransportMessages
. Особенно интересен последний, поскольку ему передается Stream
, что я смогу зашифровать полностью (правда?). Я видел, что этот подход используется here, и он правильно упоминает, что нет 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. Но я не уверен, что это важно.