Sun Java KeyManagerFactory和空密码

Sun Java KeyManagerFactory和空密码,java,keystore,pkcs#12,divide-by-zero,Java,Keystore,Pkcs#12,Divide By Zero,Sun JRE 1.6中的KeyManagerFactory存在问题。我们使用与以下类似的代码上载和使用p12格式的证书: KeyStore keyStore = KeyStore.getInstance(PKCS12); KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(SUN_X509); InputStream certificateFile = getSSLCertificate(); String

Sun JRE 1.6中的KeyManagerFactory存在问题。我们使用与以下类似的代码上载和使用p12格式的证书:

KeyStore keyStore = KeyStore.getInstance(PKCS12);
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(SUN_X509);

InputStream certificateFile = getSSLCertificate();
String certificatePassword = getSSLCertificatePassword();
keyStore.load(certificateFile, certificatePassword);
keyManagerFactory.init(keyStore, certificatePassword);
当证书密码存在时,此代码正常工作。但是,当证书密码为null(因此证书不受密码保护)时,我们会从keyManagerFactory.init行得到一个除以零的错误

有人知道为什么会这样吗?没有密码就不能使用证书吗?
谢谢

因为PKCS12包含私钥,所以您应该始终拥有密码。我认为Sun无意中实施了这一点:)

对于所有密钥库API,存储和私钥都需要密码。如果您真的不想处理配置或用户交互,只需在任何地方使用默认密码“changeit”。

这是一个错误:


解决方法是设置密码。

正确的是,您必须拥有密码。Sun故意强制执行此操作,以便您不会意外忘记密码的重要性。