使用 Windows 7、JDK 6(和 7)。
我正在尝试获取存储在 Windows MSCAPI 密钥库中的个人证书及其基本属性(以便使用私钥进行签名)。然而,一些别名被识别为没有私钥(isKeyEntry == false),尽管它实际上有一个。
任何建议如何处理这个“功能”?
可以从http://download.upce.cz/terena-public.pfx下载带有证书(已撤销)和具有这种奇怪“属性”的私钥的 P12 文件。密码是“密码”。
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");
}
}