c# - 从 X509Certificate2 中删除私钥

标签 c# x509certificate2

我使用以下方法导出包含两个 X509Certificate2 对象的证书链:一个证书和颁发该证书的证书颁发机构:

public void ExportCertificateChain(X509Certificate2 cert, X509Certificate2 ca, string outPath, string password)
{
    X509Certificate2Collection collection = new X509Certificate2Collection();
    collection.Add(cert); //certificate with private key

    //remove private key from CA, because don't want it to be usable for signing, we just want to install it to validate the first certificate
    ca.PrivateKey = null; //This throws an "Access Denied" exception!!!
    collection.Add(ca);

    var raw = collection.Export(X509ContentType.Pfx, password);
    File.WriteAllBytes(outPath, raw);                        
}

正如代码中的注释所表明的那样,问题在于将私钥清空会引发异常,告诉我“访问被拒绝”

如何正确地从 X509Certificate2 对象中删除私钥(或者,如何在没有私钥的情况下从商店获取私钥?

最佳答案

嗯,我在等待答案时找到了一个解决方法,那就是:

ca = new X509Certificate2(ca.Export(X509ContentType.Cert));

基本上,这会在没有私钥的情况下即时导出 CA 证书,然后立即将其重新构建回新的 X509Certificate2 对象。

仍然让这个问题暂时开放,以防其他人指出更“正确”的解决方案。但这似乎运作良好。

关于c# - 从 X509Certificate2 中删除私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46927771/

相关文章:

c# - X509Certificate2 错误 - 系统找不到指定的文件

c# - 如何将未知类型的泛型列表传递给类构造函数

c# - 找不到 Request.GetOwinContext

c# - 如何从类库进行通信

security - 为什么多次调用 X509Certificate2.Export(Pkcs12) 返回不同的结果?

c# - ASP.Net MVC3 模型绑定(bind) IEnumerable<T> 与编辑器模板

c# - 从 lambda(方法)语法转换为查询语法 (LINQ)

c# - 如何使用 .pfx 证书加密、解密和签名?

c# - 如何在 X509 存储中查找证书而不中断证书更新