Как я могу преобразовать сертификат BouncyCastle X509Certificate в сертификат X509Certificate2?

Есть ли способ преобразовать Org.BouncyCastle.X509.X509Certificate в System.Security.Cryptography.X509Certificates.X509Certificate2?

Обратную операцию легко выполнить, комбинируя Org.BouncyCastle.X509.X509CertificateParser с System.Security.Cryptography.X509Certificates.X509Certificate2.Export().


person kaptux    schedule 15.11.2011    source источник


Ответы (3)


Легкий!!

using B = Org.BouncyCastle.X509; //Bouncy certificates
using W = System.Security.Cryptography.X509Certificates;

W.X509Certificate2 certificate = new W.X509Certificate2(pdfCertificate.GetEncoded());

И теперь я могу проверить цепочку сертификатов на сервере:

W.X509Chain ch = new W.X509Chain();
ch.ChainPolicy.RevocationMode = W.X509RevocationMode.NoCheck;
if (!ch.Build(certificate))
   res |= ErroresValidacion.CAInvalida; 

Полезно для проверки сертификатов PDF, извлеченных с помощью iTextSharp.

person kaptux    schedule 16.11.2011
comment
Это не будет работать на некоторых платформах - вам нужно использовать new W.X509Certificate2(pdfCertificate.GetEncoded()); - person Michael Brown; 05.05.2020

Из https://github.com/dotnet/corefx/wiki/ApiCompat:

Большинство пользователей объектов X509Certificate и X509Certificate2 предполагают, что объект неизменен, за исключением методов Reset () / Dispose (), использование Import нарушает это предположение.

Другими словами, попытка использования импорта вызывает исключение в ядре .NET. Теперь вы должны использовать:

new X509Certificate(cert.GetEncoded());

но, согласно анализатору .net API (https://docs.microsoft.com/en-us/dotnet/standard/analyzers/api-analyzer),

предупреждение PC001: X509Certificate2.X509Certificate2 (byte []) не поддерживается в macOS

person cube45    schedule 14.02.2018

Думаю, это лучший ответ:

var cert = pdf.Certificates[0];//Org.BouncyCastle.X509.X509Certificate
        var cert50 = new X509Certificate();
        cert50.Import(cert.GetEncoded());
person Igor Monteiro    schedule 27.01.2017
comment
Это странно ... OP запросил способ конвертировать в X509Certificate2, но вы конвертируете в X509Certificate. И исправляя это, все, что остается, это то, что уже сказано в принятом ответе kaptux. - person mkl; 27.01.2017
comment
Это не отвечает на вопрос, поскольку преобразуется в X509Certificate, а не в X509Certificate2 объект. Он также не добавляет никакой новой логики по сравнению с принятым ответом. - person squareskittles; 21.11.2019