C# 如何将BouncyCastle X509Certificate转换为X509Certificate2?

C# 如何将BouncyCastle X509Certificate转换为X509Certificate2?,c#,.net,itextsharp,bouncycastle,C#,.net,Itextsharp,Bouncycastle,有没有办法将Org.BouncyCastle.X509.X509Certificate转换为System.Security.Cryptography.X509Certificates.X509Certificate2 将Org.BouncyCastle.X509.X509CertificateParser与 System.Security.Cryptography.X509Certificates.X509Certificate2.Export()简单 using B = Org.BouncyC

有没有办法将
Org.BouncyCastle.X509.X509Certificate
转换为
System.Security.Cryptography.X509Certificates.X509Certificate2

Org.BouncyCastle.X509.X509CertificateParser
System.Security.Cryptography.X509Certificates.X509Certificate2.Export()

简单

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; 

用于验证使用iTextSharp提取的pdf证书。

我想这是最好的答案:

var cert = pdf.Certificates[0];//Org.BouncyCastle.X509.X509Certificate
        var cert50 = new X509Certificate();
        cert50.Import(cert.GetEncoded());
发件人:

X509Certificate和X509Certificate2对象的大多数用户认为 除了Reset()/Dispose()方法之外,该对象是不可变的 使用导入违反了这一假设

换句话说,尝试使用导入会在.NETCore中引发异常。您现在应该使用:

new X509Certificate(cert.GetEncoded());
但是,根据.NETAPI分析器()的说法

警告PC001:X509Certificate2。macOS不支持X509Certificate2(字节[])


这很奇怪。。。OP询问如何将“转换为X509Certificate2”,但您将转换为“X509Certificate”。纠正这一点,剩下的只是kaptux在接受的答案中已经说过的话。这并没有回答这个问题,因为它转换为
X509Certificate
,而不是
X509Certificate2
对象。与公认的答案相比,它也没有添加新的逻辑。这在某些平台上不起作用-您需要使用
new W.X509Certificate2(pdfCertificate.GetEncoded())