【发布时间】: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