使用私钥的pfx证书......?

时间:2014-11-22 08:17:15

标签: .net certificate x509certificate private-key pfx

我有可以从加密狗安装的证书。 当我使用IE查看安装的证书时。它告诉我它有私钥如下。

enter image description here

但是当我尝试使用我的c#代码将该证书导出到.pfx时,私钥为空。

下面是我将证书导出到pfx的代码,其中私钥始终为null

public static bool ExportCertificateToPFX(string certificateSerialNumber, string pxfFilepath, StoreName storeName, StoreLocation location)
{
    bool success = false;

    X509Store store = new X509Store(storeName, location);
    store.Open(OpenFlags.ReadOnly);
    X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySerialNumber, certificateSubject, true);

    if (certs != null && certs.Count > 0)
    {
        //BELOW CONDITION ALWAYS FALSE
        if (certs[0].HasPrivateKey)
        {
            MessageBox.Show(certs[0].PrivateKey.ToString());
        }
        byte[] data = certs[0].Export(X509ContentType.Pfx, "KALPESH");
        //HERE WRITE "data" TO "pxfFilepath" FILE
    }
    store.Close();


    return success;
}

1 个答案:

答案 0 :(得分:0)

有两种可能性(从不太可能的开始):

  1. 证书的私钥使用.NET密钥存储提供程序不支持来存储密钥。例如,Microsoft KSP或它自己的。
  2. 根本没有私钥。您可以使用适当的参数运行certutil -store(取决于安装证书的位置)以验证是否存在私钥。如果密钥使用不受支持的密钥存储,此命令也会给出答案。