c# - 在 C# 中将证书链添加到 PKCS#7/CMS 容器

标签 c# x509certificate x509 pkcs#7

我正在从我正在使用的服务中获取一个 PKCS#7/CMS 容器,其中包括一个用户证书和一个签名。

我可以使用 SignedCms 查看单个证书

var cert = GetCertFromServer();

SignedCms signedCms = new SignedCms();
signedCms.Decode(cert);

// The user certificate
X509Certificate2 userCert = signedCms.Certificates[0];  

但我需要将中间证书和根证书添加到该链中。 SignedCms.Certificates 似乎是不可变的,所以我无法将证书直接添加到集合中,也无法通过以下方式替换证书集合

// root, inter and leaf certs are X509Certificate2 objects read from files
X509Certificate2[] certArr = new[] {rootCert, interCert, leafCert, userCert};

X509Certificate2Collection chain = new X509Certificate2Collection(certArr);

signedCms.Certificates = chain; // Error: No setter

因为 SignedCms.Certificates 没有 setter 。我一直无法找到一种方法来从这个容器创建一个新容器。我也没有在充气城堡或任何其他图书馆中找到有关如何执行此操作的信息。

我需要一个包含证书链和签名的容器,并将该容器中的字节写入我正在签名的 PDF 文件。有没有办法将证书添加到容器中的链中?

最佳答案

我知道问这个问题已经好几年了,但我最近遇到了同样的问题。

对于遇到同样问题的人,X509Certificate2Collection 类有一个 Export 方法。

X509Certificate2[] certArr = certificates.ToArray();
X509Certificate2Collection chain = new X509Certificate2Collection(certArr);
byte[] result = chain.Export(X509ContentType.Pkcs7);

关于c# - 在 C# 中将证书链添加到 PKCS#7/CMS 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21572886/

相关文章:

java - 如何获取java的X509Certificate中的策略标识符和基本约束的主体类型

security - 什么取代了 Java 的 sun.security 包?

c# - 使用 C# 读取证书签名请求

c# - 在一个解决方案中使用 C# 和 VB.NET

Java - 获取证书链

automation - IE9,使用 CertEnroll.dll 时自动化服务器无法创建对象错误

go - 使用更新的 CommonName 重新生成新的 x509 证书

c# - 使用 CurrentCulture 设置为任务创建者 CurrentCulture 执行任务

c# - 如何确保仅供特定用户下载的链接?

c# - 可以从立即窗口调用扩展方法吗