Подписание S / MIME с Mimekit (Сертификат из магазина) - PullRequest
0 голосов
/ 14 октября 2019

Я хочу подписать тело MIME с сертификатом, который находится в хранилище сертификатов Windows. Тот же сертификат отлично работает для подписи сообщений с некоторыми почтовыми агентами (например, Outlook, TBird).

Я загружаю сертификат в «хранилище». X509Store store = новый X509Store (StoreLocation.CurrentUser);

и с X509Certificate2Collection signatureCert = currentCerts.Find (X509FindType.FindBySubjectDistinguishedName, certName, false);

 I get the right certificate into signingCert.


 using (var ctx = new TemporarySecureMimeContext())
        {                
            var cert2 = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(cert);
            CmsSigner signer = new CmsSigner(cert2);
            ctx.Import(cert2);
            mimeMessage.Body = ApplicationPkcs7Mime.Sign(ctx, signer, DigestAlgorithm.Sha1, body);

        }

Проблема (насколько я вижу) в том, что CmsSigner ожидает два параметра, а не один, как описано. В последнем пакете nuget CmsSigner ожидает ключ в качестве второго параметра, но как мне получить ключ из магазина?

Любые советы приветствуются ... TIA

1 Ответ

0 голосов
/ 15 октября 2019

Начиная с MimeKit v2.4, API-интерфейс netstandard2.0 для CmsSigner будет идентичен API .NETFramework4.x, что позволит вам создать CmsSigner, передав ему X509Certificate2 без необходимости превращать его в сертификат BouncyCastle ибез необходимости преобразовывать PrivateKey X509Certificate2 в BouncyCastle AsymmetricKeyParameter.

CmsSigner signer = new CmsSigner (certificate2);

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

...