【问题标题】:Certificate to pfx with private key...?带有私钥的 pfx 证书...?
【发布时间】:2015-01-20 10:18:36
【问题描述】:

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

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

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

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;
}

【问题讨论】:

  • 你的代码在哪里?
  • 很可能,加密狗不允许提取私钥。
  • 好吧,在这种情况下,系统发育有任何可能性,我可以使用我的代码直接从加密狗读取私钥和证书。
  • @ManishJain 阻止访问的正常原因是出于安全原因。当你有加密狗时,你的加密狗就在那里签名。如果有人可以插入它并拔出它持有的私钥,那么它就会失去这种安全性。它变成了“你知道的东西”而不是“你拥有的东西”。
  • 是的,您应该使用 PKCS#11 接口或 Cryptoapi 的自定义 csp 来访问加密狗中的密钥。你用的是什么令牌?你的编程语言是什么?

标签: .net certificate x509certificate private-key pfx


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-24
    • 2016-03-16
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    相关资源
    最近更新 更多