c# - 在没有私钥的情况下解析 PKCS #7 SSL 证书链 (.p7b)?

标签 c# security ssl certificate pkcs#7

我有一个 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/

相关文章:

iis - 如何停止本地主机 IIS 上的 HTTPS 错误

c# - 单击鼠标左键打开上下文菜单 wpf c#

javascript - 使 jQuery 库在 Facebook.com 域中可用

php - OpenSSL 已启用但无法找到包装器 "ssl"

linux - Linux 上的权限有限

php - 文件权限;我的 www 文件夹内容应该归 www 数据所有吗?

firebase - Google Firebase SSL 证书 - 我的证书列出了大量其他网站

c# - 使用 C# 代码格式化完整地址

c# - 将 TableAdapter 与基类、接口(interface)或部分类一起使用的更智能方法

c#加密xml文件