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

时间:2018-12-22 13:51:00

标签: c# bouncycastle x509certificate

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

大多数情况下,这是可行的:

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.GetResponseStream(),Encoding.UTF8)中的UTF8。

0 个答案:

没有答案