2011-08-18 163 views
3

我有一个PKCS#7,签署,.p7b文件包含的X509 SSL证书,并与签署的中间和根CA证书。我需要用C#来解析.p7b文件,拔出SSL证书,并拉出一些值它关闭(终止日期,DN等)。解析没有私钥的PKCS#7 SSL证书链(.p7b)?

我试着读它作为像这样的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) 
{ 
    ... 
} 

然而抛出的DecodeASN1 bad tag value met异常。经过一番搜索之后,我相信那是因为我没有用来创建证书和/或签署证书的私钥。

有谁知道我可以使用C#解析此的.p7b证书链?

回答

1

好吧,我是个白痴。我打开了.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); 
+0

这是什么exatly我有问题。您可以请分享从数据库中检索字节的代码部分,然后将其转换为X509Certificate?谢谢 – daehaai