JDK 1.6与IBM 1.5上的java.security.Keystore别名

时间:2011-05-04 12:09:27

标签: java security openssl keystore jdk1.6

我对KeyStore.aliases()的枚举返回值有疑问;

FileInputStream is = new FileInputStream("/tmp/file.p12");
List<String> aliases = new ArrayList<String>();

KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(is, password.toCharArray());
is.close();

Enumeration<String> e=keystore.aliases();
while(e.hasMoreElements()) {
    // never reaches here because "e" is empty
    System.out.println(e.nextElement().toString());
    i++;
}

使用 Java版本&#34; 1.6.0_22&#34; Java(TM)SE运行时环境(版本1.6.0_22-b04) Java HotSpot(TM)64位服务器VM(版本17.1-b03,混合模式)

我得到一个空的枚举器

使用 java版&#34; 1.5.0&#34; Java(TM)2运行时环境,标准版(build pxi32devifx-20100511a(SR11 FP2)) IBM J9 VM(build 2.3,J2RE 1.5.0 IBM J9 2.3 Linux x86-32 j9vmxi3223ifx-20100510(已启用JIT) J9VM - 20100509_57823_lHdSMr JIT - 20091016_1845ifx7_r8 GC - 20091026_AA) JCL - 20100511a

我能够获得所有别名。

如何使用Sun / Oracle JDK6检索所有商店pkcs12别名?

由于

2 个答案:

答案 0 :(得分:0)

您的代码似乎没有任何问题,我认为PKCS#12密钥库应该可以在所有JRE的所有版本中读取。

您是否尝试使用OpenSSL验证商店?

答案 1 :(得分:0)

这是答案:

http://www-01.ibm.com/support/docview.wss?uid=swg1IZ77005

- 问题的结论 这个缺陷将在以下方面得到修复:
1.4.2 SR14
5.0.0 SR12
6.0.0 SR9

修改了PKCS SafeContents.getSafeBags( )方法以检测SafeBag数组何时为空并返回空的SafeBag数组。该方法的PKCS调用者准备处理空的SafeBag数组。