InvalidAlgorithmParameterException:trustAnchors参数必须为非空

时间:2014-05-27 06:27:30

标签: java keytool pki

我从我的java代码中得到了这个奇怪的错误:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

我用来生成密钥库的命令: keytool -genkey -alias tomcat -keystore keystore.jks

这是我的java代码:

import java.security.cert.PKIXParameters;
import java.security.KeyStore;
import java.io.FileInputStream;

public class MyKeyTest {
    public static void main(String[] args) throws Exception {
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        String password = "mypass";
        ks.load(new FileInputStream("keystore.jks"), password.toCharArray());
        new PKIXParameters(ks);
    }
}

我试图谷歌周围的这个错误,但大多数情况下,它说这发生在没有找到密钥库或不允许阅读。

但在我的情况下,这两种情况都不是真的。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

一些简短而简化的背景只是不清楚的情况。 PKIXParameters对象用于客户端证书验证。这是一种允许或禁止访问您的Web资源的方法。通常的方式是

  • 您有一个您信任的证书颁发机构(CA)证书列表(这是您的信任存储)。
  • 您的应用程序要求客户提供数字证书(客户端证书
  • 客户端证书将包含签署客户端证书的CA证书 。如果 CA证书在您的列表中,则客户端会通过验证

keystore.jks文件是您的信任存储区。您的信任存储当前不包含任何证书(只是一个无用的私钥)。要添加ca证书,您将使用此命令

Warning: Possible EventEmitter memory leak detected. 11 object listeners added. Use emitter.setMaxListeners() to increase limit

例如,将CA证书从浏览器导出到文件,然后将其导入信任库

  • 转到您的控制面板/互联网选项/内容标签,然后点击证书。
  • 选择“受信任的根证书颁发机构”选项卡并选择证书(例如“Microsoft根证书颁发机构”)
  • 单击导出并将其保存到文件(对于此示例,我使用“msroot.cer”)。
  • 在命令提示符下运行以下命令

    keytool -import -alias msroot -file msroot.cer -keystore keystore.jks

现在,当您使用此更新的keystore.jks运行Java代码时,它应该运行得很好。