1

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");
    }
}
4

1 に答える 1

0

あなたの pfx ファイルを Mozilla Thunderbird にインポートし、p12 ファイルとしてエクスポートしました。これで、MSCAPI を介して表示できるようになりました。元の証明書には、MSCAPI が秘密鍵を参照できないようにする何かが含まれている必要があります。

ファイルを比較したところ、元のファイルでは Key Usage セクションが使用されていることがわかりました。

元の 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>

2 つのファイルにはさらに違いがありますが、どちらが望ましくない動作を引き起こすかはわかりません。

于 2013-03-06T20:30:41.113 に答える