【问题标题】:Create CRL file with Bouncy Castle c#使用 Bouncy Castle c# 创建 CRL 文件
【发布时间】:2016-03-29 23:16:39
【问题描述】:

我已经使用 Bouncy Castle 构建了自己的根 CA 证书,并且正在使用它来构建其他证书。我想使用 Bouncy Castle C# 构建证书吊销列表 (CRL) 以包含吊销证书的列表。示例:

//Retrieve CA root certificate

X509Store CAstore = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
CAstore.Open(OpenFlags.ReadWrite | OpenFlags.OpenExistingOnly);

X509Certificate2Collection x509Certificate2Collection =
CAstore.Certificates.Find(X509FindType.FindBySerialNumber,
                         this.textBoxSerialCA.Text, true);

X509Certificate2 cert = x509Certificate2Collection[0];
var certCA = DotNetUtilities.FromX509Certificate(cert);
CAstore.Close();

X509V2CrlGenerator crlGen = new X509V2CrlGenerator();
crlGen.SetIssuerDN(certCA.IssuerDN);
crlGen.SetThisUpdate(DateTime.Now);
crlGen.SetNextUpdate(DateTime.Now.AddYears(1));
crlGen.SetSignatureAlgorithm("SHA1withRSA");

crlGen.AddCrlEntry(BigInteger.One, DateTime.Now, CrlReason.PrivilegeWithdrawn);

crlGen.AddExtension(X509Extensions.AuthorityKeyIdentifier,
                   false, 
                   new AuthorityKeyIdentifierStructure(certCA));

crlGen.AddExtension(X509Extensions.CrlNumber,
                   false, 
                   new CrlNumber(BigInteger.One));

var randomGenerator = new CryptoApiRandomGenerator();
var random = new SecureRandom(randomGenerator);

var Akp = Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(cert.PrivateKey).Private;                


X509Crl crlTemp = crlGen.Generate(Akp,random);

到目前为止一切正常。如何将 X509Crl 对象保存到 .crl 文件中?

最好的问候。

【问题讨论】:

  • 创建 CRL 后,如何在这个 CRL 中添加提供的证书?

标签: c# bouncycastle certificate-revocation


【解决方案1】:

BouncyCastle.Crypto 版本 1.7.4114.6375 中,我能够获取您的代码并简单地添加:

var b = crlTemp.GetEncoded();

System.IO.File.WriteAllBytes(@"C:\temp\test.crl", b);

然后,在 Windows 中,双击“test.crl”文件将打开标准的内置证书吊销列表对话框,没有任何错误,并且与其他信息相比,所有信息看起来都是正确的CRL 文件。

【讨论】:

    【解决方案2】:

    在获得 PEM 格式的 CRL 后,您可以通过 openssl 使用以下命令对其进行转换:

    openssl crl -in list.pem -outform der -out list.crl
    

    【讨论】:

      【解决方案3】:

      这个答案来得太晚了,但您可以使用 Bouncy Castle 中的 PemWriter 类写入 PEM 文件。

      PemWriter pemWriter = new PemWriter(new StreamWriter(File.Open(fileName, FileMode.Create)));
      pemWriter.WriteObject(crlTemp);
      pemWriter.Writer.Flush();
      pemWriter.Writer.Close();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-15
        • 1970-01-01
        • 2015-10-15
        • 1970-01-01
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多