在 Java 密钥库中导入 pkcs12 (.p12) 客户端证书文件时,CertificateChain 为空
CertificateChain is null when importing pkcs12 (.p12) client-certificate file in Java Keystore
我将带有证书链的客户端-ssl-证书密钥对导出为 PKCS12 文件密钥库浏览器。我能够再次使用 KSE 加载此 PKCS12 文件,并且密钥对和证书链都在那里。当我将它加载到 java KeyStore 时,我能够访问密钥,但证书链为空。
这是我的代码:
final KeyStore instance = KeyStore.getInstance( "pkcs12" );
instance.load( new ByteArrayInputStream( bytes ), password );
instance.getKey(alias, password) => returns Key
instance.getCertificateChain(alias) => returns null
final KeyStore.ProtectionParameter param = new KeyStore.PasswordProtection( password );
final KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) instance.getEntry( alias, param );
=> fails:
java.lang.NullPointerException: invalid null input
at java.security.KeyStore$PrivateKeyEntry.<init>(KeyStore.java:524) ~[na:1.8.0_202]
at sun.security.pkcs12.PKCS12KeyStore.engineGetEntry(PKCS12KeyStore.java:1311) ~[na:1.8.0_202]
at java.security.KeyStore.getEntry(KeyStore.java:1521) ~[na:1.8.0_202]
通过调试我可以看到,调用 PrivateKeyEntry 的构造函数时链参数为空:
image: debugging PrivateKeyEntry constructor call
这个我完全没有解释,网上也没查到资料
我可以排除使用的别名和使用的密码作为原因。
我会感谢有关此主题的任何提示。
提前致谢,
亚历山大
如您所见:
https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/java/security/KeyStore.java#L523
以下三种情况之一抛出异常:
- 您有密钥但没有私钥。
- 你没有链(你说的)
- 您没有属性。
要确保链是问题所在,您可以使用
激活调试
-Djava.security.debug=all
我将带有证书链的客户端-ssl-证书密钥对导出为 PKCS12 文件密钥库浏览器。我能够再次使用 KSE 加载此 PKCS12 文件,并且密钥对和证书链都在那里。当我将它加载到 java KeyStore 时,我能够访问密钥,但证书链为空。
这是我的代码:
final KeyStore instance = KeyStore.getInstance( "pkcs12" );
instance.load( new ByteArrayInputStream( bytes ), password );
instance.getKey(alias, password) => returns Key
instance.getCertificateChain(alias) => returns null
final KeyStore.ProtectionParameter param = new KeyStore.PasswordProtection( password );
final KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) instance.getEntry( alias, param );
=> fails:
java.lang.NullPointerException: invalid null input
at java.security.KeyStore$PrivateKeyEntry.<init>(KeyStore.java:524) ~[na:1.8.0_202]
at sun.security.pkcs12.PKCS12KeyStore.engineGetEntry(PKCS12KeyStore.java:1311) ~[na:1.8.0_202]
at java.security.KeyStore.getEntry(KeyStore.java:1521) ~[na:1.8.0_202]
通过调试我可以看到,调用 PrivateKeyEntry 的构造函数时链参数为空:
image: debugging PrivateKeyEntry constructor call
这个我完全没有解释,网上也没查到资料
我可以排除使用的别名和使用的密码作为原因。
我会感谢有关此主题的任何提示。
提前致谢,
亚历山大
如您所见:
https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/java/security/KeyStore.java#L523
以下三种情况之一抛出异常:
- 您有密钥但没有私钥。
- 你没有链(你说的)
- 您没有属性。
要确保链是问题所在,您可以使用
激活调试 -Djava.security.debug=all