加载密钥库时出现 NullPointerException

NullPointerException when loading keystore

我正在尝试从 pfx 文件加载密钥库,但是当我尝试上传 pfx 文件并使用下面的代码加载密钥库时,它给了我一个 NullPointerException。密码和我的 baos (ByteArrayOutputStream) 不为空。知道会发生什么吗?

KeyStore ks = KeyStore.getInstance("PKCS12");
String passw = passwordField.getValue();
ks.load(new ByteArrayInputStream(baos.toByteArray()), passw.toCharArray());

此代码适用于很多证书,但在特定的 pfx 文件中这给了我这个问题:

java.lang.NullPointerException
    at java.lang.String.<init>(String.java:491)
    at sun.security.pkcs12.PKCS12KeyStore.loadSafeContents(PKCS12KeyStore.java:2286)
    at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2025)
    at java.security.KeyStore.load(KeyStore.java:1445)

谢谢。

我认为您需要提供密钥库文件的路径。

KeyStore  keyStore = KeyStore.getInstance("PKCS12");
File f = new File(KEY_STORE_FILE);
if (!f.exists())
{   
   throw new Exception("File Not Found");
 }
 InputStream input = new FileInputStream(KEY_STORE_FILE);
 keyStore.load(input, KEY_STORE_PASS);
 input.close();
 return keyStore;

这里所有常量都是从配置文件中加载的。

几天前我遇到了同样的问题。 在我的例子中,问题是导出的 pfx 文件 without/wrongly 证书本身和私钥。它只包含 public 信任密钥链。

解决方案是再次导出 pfx 文件。

用 Windows 中的这个程序检查你的 pfx 文件(来自 Kent Chen 的文章): https://www.nextofwindows.com/how-to-check-a-pfx-certifications-expiry-date-on-windows

或在linux中使用:

openssl pkcs12 -info -in certificate_name.p12