如何在 C# 中将 PEM 编码的 X509 证书转换为 Org.BouncyCastle.X509.X509 证书


如何将 PEM 编码的 X509 证书

转换为充气城堡 X509 证书?我收到代表签名证书颁发者的 PEM 编码的 X509 证书(在 RFC 5280 中定义)。PEM 编码格式(在 RFC 1421 中定义)要求行长度为 64 个字符。PEM 编码证书通过 HttpWebRequest (application/json;charset=utf-8) 接收。

这是大多数时候有效的方法:

Org.BouncyCastle.X509.X509Certificate pemToX509Certificate(string signature)
    {
        byte[] buffer = GetBytesFromPEM("CERTIFICATE", signature);
        X509CertificateParser parser = new X509CertificateParser();
        Org.BouncyCastle.X509.X509Certificate cert = parser.ReadCertificate(buffer);
        return cert;
    }
    byte[] GetBytesFromPEM(string type, string pem)
    {
        byte[] bytes = Encoding.Default.GetBytes(pem);
        pem = Encoding.UTF8.GetString(bytes);
        string header = String.Format("-----BEGIN {0}-----", type);
        string footer = String.Format("-----END {0}-----", type);
        int start = pem.IndexOf(header) + header.Length;
        int end = pem.IndexOf(footer, start);
        string base64 = pem.Substring(start, (end - start));
        return Convert.FromBase64String(base64);
    }

这是正确的方法吗?尤其是Encoding.UTF8.GetString部分?因为我已经特别告诉 HttpWebRequest 响应是 StreamReader(response) 中的 UTF8。GetResponseStream(), Encoding.UTF8).

看到评论,我删除了前两行:

 protected static byte[] GetBytesFromPEM(string type, string pem)
    {
        string header = String.Format("-----BEGIN {0}-----", type);
        string footer = String.Format("-----END {0}-----", type);
        int start = pem.IndexOf(header) + header.Length;
        int end = pem.IndexOf(footer, start);
        string base64 = pem.Substring(start, (end - start));
        return Convert.FromBase64String(base64);
    }

最新更新