【问题标题】:NullPointerException when loading keystore加载密钥库时出现 NullPointerException
【发布时间】:2018-09-05 01:28:39
【问题描述】:

我正在尝试从 pfx 文件加载密钥库,但是当我尝试上传 pfx 文件并使用以下代码加载密钥库时,它给了我一个 NullPointerException。密码和我的包(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)

谢谢。

【问题讨论】:

  • 这可能是this line。出于某种原因,keyIdnull
  • 这看起来是一个非常具体的问题,有什么想法吗?

标签: java certificate keystore pfx pkcs#12


【解决方案1】:

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

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;

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

【讨论】:

  • 你能在这里得到例外吗?你在哪一行得到空指针异常,因为这段代码对我有用。
  • 另外,文件的扩展名是 .p12 还是 .pfx ?如果是 pfx,如果可能,您可以尝试使用 p12 扩展。
  • 我在这一行得到一个空指针异常:ks.load(new ByteArrayInputStream(baos.toByteArray()), passw.toCharArray());
  • 文件扩展名为.pfx。
  • 您是如何创建 pfx 文件的?问题应该出在 pfx 文件的创建上。
【解决方案2】:

几天前我遇到了同样的问题。 在我的情况下,问题是在没有/错误地导出证书本身和私钥的情况下导出的 pfx 文件。它只包含信任的公钥链。

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

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

或者在linux中使用:

openssl pkcs12 -info -in 证书名称.p12

【讨论】:

  • 欢迎来到stackoverflow!请添加相关标签。
  • 谢谢!就是这样!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
相关资源
最近更新 更多