使用Bouncy Castle c#创建CRL文件

本文关键字:CRL 文件 创建 Bouncy Castle 使用 | 更新日期: 2023-09-27 18:27:55

我已经用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文件中?

致以最良好的问候。

使用Bouncy Castle c#创建CRL文件

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

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

BouncyCastle.Crypto版本1.7.4114.6375中,我可以接受您的代码,只需添加:

var b = crlTemp.GetEncoded();
System.IO.File.WriteAllBytes(@"C:'temp'test.crl", b);

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

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

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