Windows-MY中的某些证书​​私钥未检测到

使用Windows 7,JDK 6(和7)。

我试图获得存储在Windows MSCAPI密钥存储区中的个人证书和它的基本属性(为了使用私钥进行签名)。 然而,一些别名被标识为没有私钥(isKeyEntry == false),尽pipe它实际上有一个。

任何build议如何处理这个“function”?

具有证书(已被撤销)的P12文件和具有这个奇怪“属性”的私钥可以从http://download.upce.cz/terena-public.pfx下载。 密码是“密码”。

KeyStore ks = KeyStore.getInstance("Windows-MY", "SunMSCAPI"); ks.load(null, null); Enumeration<String> aliases = ks.aliases(); while (aliases.hasMoreElements()) { String alias = (String) aliases.nextElement(); X509CertImpl certificate = (X509CertImpl)ks.getCertificate(alias); System.out.println("Alias: " + alias); System.out.println(" Subject: " + certificate.getSubjectDN()); System.out.println(" Issued By: " + certificate.getIssuerDN()); if (ks.isKeyEntry(alias)) { System.out.println(" Has private key"); } } 

Solutions Collecting From Web of "Windows-MY中的某些证书​​私钥未检测到"

我将你的pfx文件导入到Mozilla Thunderbird中,并将其导出为p12文件。 现在我可以通过MSCAPI看到它。 原始证书中必须有一些防止MSCAPI查看私钥的内容。

我比较了这些文件,我注意到在原始文件中使用了密钥使用部分。

原始的pfx:

 Bag Attributes localKeyID: 01 00 00 00 friendlyName: le-b6311e84-87e7-4e02-9cf6-4012518e0541 Microsoft CSP Name: Microsoft Software Key Storage Provider Key Attributes X509v3 Key Usage: 90 

转换p12:

 Bag Attributes friendlyName: le-b6311e84-87e7-4e02-9cf6-4012518e0541 localKeyID: 47 E4 D3 F0 75 48 9D 77 07 E9 51 A4 F1 B6 DF E9 40 80 26 7A Key Attributes: <No Attributes> 

这两个文件有更多的差异,但我不确定哪一个会导致不需要的行为。