Ошибка MSMQ при использовании внешнего сертификата: CorruptedSecurityData - PullRequest
0 голосов
/ 26 сентября 2019

Я не могу получить внешние сертификаты для работы с MSMQ (Windows Server 2012 R2, .NET 4.7.2).

Message msg = new Message(data)
{
    UseAuthentication = true,
    SenderCertificate = cert.GetRawCertData(),
};

this._queue.Send(msg);

Мой код довольно прост для его тестирования, где сертификат является сертификатом X509который я загружаю из хранилища личных сертификатов текущего пользователя (хотя попытка загрузки из файла тоже выполняется, MSMQ требует, чтобы он работал в хранилище личных сертификатов).

Когда я запускаю это, я получаю исключение:

System.Messaging.MessageQueueException
HResult=0x80004005
Message=Cryptographic function has failed.
Source=System.Messaging
StackTrace:
  at System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
  at System.Messaging.MessageQueue.Send(Object obj)
  at blah blah...

MessageQueueErrorCode: CorruptedSecurityData

Я пробовал различные сертификаты (подписанные доменным CA, подписанные локальным CA, самоподписанные и т. Д.), Все с одинаковым результатом.Обычно я использую самозаверяющий сертификат OpenSSL, который не имеет ограничений по использованию и которому доверяет корневое хранилище локальной машины, чтобы обеспечить его проверку (хотя я не уверен, что это необходимо для MSMQ).Сертификат также естественно загружается в AD, но ошибка не меняется, если это не так.Пробовал различные алгоритмы, в настоящее время на SHA512.

Если я укажу недействительный сертификат, то ошибка изменится, чтобы отразить, поэтому я не думаю, что есть проблема с выбором сертификата.

IЯ пытаюсь найти рабочие примеры людей, использующих внешние сертификаты с .NET и MSMQ.

...