解析没有私钥的pkcs# 7 SSL证书链(.p7b)
本文关键字:证书链 SSL p7b pkcs# 私钥 | 更新日期: 2023-09-27 18:06:07
我有一个pkcs# 7,签名的。p7b文件,其中包含一个X509 SSL证书以及它所签名的中间和根CA证书。我需要使用c#来解析.p7b文件,提取SSL证书,并从中提取一些值(到期日期,DN等)。
我试过把它当作X509证书来读,像这样:
//certContent is a byte array with the p7b file contents
X509Certificate2 cert = new X509Certificate2(certContent);
对于常规的。cer证书可以正常工作,但是当与。p7b证书一起使用时抛出CryptographicException
。这是因为.p7b包含了整个证书链。
我还尝试将其解析为SignedCms
对象,然后遍历证书链并取出我的SSL证书:
SignedCms certContainer = new SignedCms();
certContainer.Decode(certContent);
foreach(X509Certificate2 cert in certConatiner.Certificates)
{
...
}
然而,在Decode
上抛出一个异常,说ASN1 bad tag value met
。经过一番搜索,我相信这是因为我没有用于创建证书和/或签名证书的私钥。
有人知道我如何使用c#解析这个。p7b证书链吗?
好吧,我是个白痴。我打开了。p7b文件,发现里面只是base64。我取出base64,对其进行解码,然后将其解析为签名的CMS,一切都很好。
String content = Encoding.UTF8.GetString(certContent);
String base64Content = content.Replace("-----BEGIN CERTIFICATE-----", "").Replace("-----END CERTIFICATE-----", "").Replace("'r", "").Replace("'n", "");
byte[] decodedContent = Convert.FromBase64String(base64Content);
SignedCms certContainer = new SignedCms();
certContainer.Decode(decodedContent);