【问题标题】:How can I convert a BouncyCastle X509Certificate to an X509Certificate2?如何将 BouncyCastle X509Certificate 转换为 X509Certificate2?
【发布时间】:2011-11-15 12:55:51
【问题描述】:

有什么方法可以将Org.BouncyCastle.X509.X509Certificate 转换为System.Security.Cryptography.X509Certificates.X509Certificate2

逆运算很简单,将Org.BouncyCastle.X509.X509CertificateParserSystem.Security.Cryptography.X509Certificates.X509Certificate2.Export().

【问题讨论】:

    标签: c# .net itextsharp bouncycastle


    【解决方案1】:

    简单!!

    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 证书。

    【讨论】:

    • 这在某些平台上不起作用-您需要使用new W.X509Certificate2(pdfCertificate.GetEncoded());
    【解决方案2】:

    来自https://github.com/dotnet/corefx/wiki/ApiCompat

    X509Certificate 和 X509Certificate2 对象的大多数用户都认为 该对象是不可变的,除了 Reset()/Dispose() 方法, 使用 Import 违反了这个假设。

    换句话说,尝试使用 import 会在 .net 核心中引发异常。您现在应该使用:

    new X509Certificate(cert.GetEncoded());
    

    但是,根据 .net API 分析器 (https://docs.microsoft.com/en-us/dotnet/standard/analyzers/api-analyzer),

    警告 PC001:X509Certificate2.X509Certificate2(byte[]) 在 macOS 上不受支持

    【讨论】:

      【解决方案3】:

      我想这是最好的答案:

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

      【讨论】:

      • 这很奇怪...... OP 要求一种将 " 转换为 X509Certificate2" 的方法,但您转换为 "X509Certificate"。并纠正这一点,剩下的就是 kaptux 在接受的答案中已经说过的话。
      • 这没有回答问题,因为它转换为X509Certificate,而不是X509Certificate2 对象。与接受的答案相比,它也没有添加任何 new 逻辑。
      猜你喜欢
      • 1970-01-01
      • 2013-04-27
      • 2022-01-21
      • 2015-03-19
      • 2015-12-06
      • 2017-10-16
      • 2017-09-07
      • 1970-01-01
      • 2021-03-09
      相关资源
      最近更新 更多