我有一个 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 错误标记值已满足
。经过一番搜索,我认为那是因为我没有用于创建证书和/或签署证书的私钥。
有谁知道如何使用 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);
关于c# - 在没有私钥的情况下解析 PKCS #7 SSL 证书链 (.p7b)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7112148/