C# X509证书。导出方法

C# X509证书。导出方法,c#,C#,我尝试导出证书。pfx: string certPath = "D:\\cert.pfx"; cert = new X509Certificate2(certPath, "pass"); byte[] certData = cert.Export(X509ContentType.Pfx,"pass"); /// **error in this line** X509Certificate newCert = new X509Certificate(certData,"pass"); 但它

我尝试导出证书。pfx:

string certPath = "D:\\cert.pfx";
cert = new X509Certificate2(certPath, "pass");

byte[] certData = cert.Export(X509ContentType.Pfx,"pass"); /// **error in this line** 

X509Certificate newCert = new X509Certificate(certData,"pass");
但它以以下错误结束:

密钥在指定状态下无效。


有人能帮我吗??是否有任何解决方案可以从存储导出证书???

您确定证书可以导出吗

编辑:


有一个,似乎这家伙有一个非常类似的问题,并解决了。

我认为您无法导出私钥,因为您用于创建证书的构造函数
X509Certificate2(文件路径,密码)
没有将生成的证书标记为可导出。我建议使用一个重载构造函数,它允许您指定可导出标志-X509KeystrageFlags.exportable,例如
X509Certificate2(文件路径、密码、X509keystrageFlags.Exportable)

有关MSDN库中X509Certificate2和其他X509KeyStrageFlags的详细信息


此外,您还应检查X509Certificate2.HasPrivateKey属性,以确保您拥有与证书关联的私钥。

对于这些答案无法解决的问题,以下是我的解决方案:

而是另存为pfx

byte[] certData = certificado.Export(X509ContentType.Pfx, "pass");
尝试另存为另一种内容类型,我的是“Cert”


我不知道任何C#,但他似乎是从PKCS#12文件加载证书,而不是从智能卡加载证书,所以我不认为可导出在这里是个问题…@lapo,智能卡不是使用.PFX的唯一方法,例如,使用PFX文件登录.NET的代码,但是我可能把这种情况与其他事情混淆了。顺便说一句,这个答案是正确的。海报上应该有这样的标记
byte[] certData = certificado.Export(X509ContentType.Cert, "pass");