java – InvalidAlgorithmParameterException:trustAnchors参数必须为非空

我从我的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);
    }
}

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

但在我的情况下,这两种情况都不是真的.有任何想法吗?

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

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

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

keytool -import -alias <an alias for the CA cert> -file <the trusted CA cert> -keystore <your keystore>

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

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

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

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

转载注明原文:java – InvalidAlgorithmParameterException:trustAnchors参数必须为非空 - 代码日志