Я не могу получить внешние сертификаты для работы с 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.