在.net中转换不同的证书吊销列表格式

时间:2016-10-24 22:52:27

标签: c# ssl-certificate x509certificate2 openssl-net

我需要在.crl扩展名中转换一堆证书撤销列表,它们是DER格式(二进制),我需要将它们转换为PEM格式(每个.crl文件的二进制内容的Base64字符串表示) 。

根据Convert .der to .pem using OpenSSL-Net中的说明,我创建了以下代码,尝试将单个.crl文件从其DER格式转换为PEM格式:

    private static void generateCrl()
    {
        byte [] certbyte = File.ReadAllBytes("D:\\certsunzip\\DODIDCA_44.crl");
        Console.WriteLine("First byte: {0}", certbyte[0]);
        X509Certificate2 cert = new X509Certificate2(certbyte);
        string pem = "-----BEGIN X509 CRL-----\r\n" + Convert.ToBase64String(cert.RawData, Base64FormattingOptions.InsertLineBreaks) + "-----END X509 CRL-----";
        using (StreamWriter outputFile = new StreamWriter(@"D:\certsunzip\test.crl"))
        {
            foreach (char chr in pem)
            outputFile.WriteLine(chr);
        }
    }

然而,当我运行代码时,X509Certificate2构造函数给我一个CryptographicException,说"找不到请求的对象"。我想知道有没有其他方法可以进行此转换,也许X509Certificate2构造函数不喜欢crl文件?

1 个答案:

答案 0 :(得分:2)

删除第3行,因为它没有意义(因为X509Certificate2类不支持CRL)并使用' certbyte'变量在第4行:

private static void generateCrl()
{
    byte [] certbyte = File.ReadAllBytes("D:\\certsunzip\\DODIDCA_44.crl");
    Console.WriteLine("First byte: {0}", certbyte[0]);
    string pem = "-----BEGIN X509 CRL-----\r\n" + Convert.ToBase64String(certbyte, Base64FormattingOptions.InsertLineBreaks) + "-----END X509 CRL-----";
    using (StreamWriter outputFile = new StreamWriter(@"D:\certsunzip\test.crl"))
    {
        outputFile.Write(pem);
    }
}

这样可行。