Windows 7、JDK 6 (および 7) を使用。
Windows MSCAPI キー ストアに保存されている個人証明書を取得しようとしていますが、これは基本的なプロパティです (署名に秘密キーを使用するため)。ただし、一部のエイリアスは、実際には秘密鍵を持っていますが、秘密鍵を持っていません (isKeyEntry == false) と識別されます。
この「機能」に対処する方法について何か提案はありますか?
この奇妙な「プロパティ」を持つ証明書 (既に失効している) と秘密鍵を含む 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");
}
}