【问题标题】:InvalidAlgorithmParameterException: the trustAnchors parameter must be non-emptyInvalidAlgorithmParameterException:trustAnchors 参数必须为非空
【发布时间】:2017-07-11 03:42:00
【问题描述】:

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

我试图用谷歌搜索这个错误,但大多数情况下它说这是在找不到密钥库或不允许读取密钥库时发生的。

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

【问题讨论】:

  • 如果您通过该命令“生成”密钥库,则只有一个私钥条目,而没有可信证书条目。 docs.oracle.com/javase/7/docs/api/java/security/cert/… 说它抛出 InvalidAlgorithmParameterException - 如果密钥库不包含至少一个受信任的证书条目。
  • 如何使用 keytool 添加可信证书条目?
  • 查看 docs.oracle.com/javase/7/docs/technotes/tools/windows/… 尤其是 -importcert 以获取文件中的证书(到唯一的 -alias 不是/a 私钥条目)或来自另一个 JKS 的 -importkeystore 已经包含受信任的证书条目(或一些)。特别是每个 Suncle JRE(或 JDK)安装都带有一个默认的信任库,位于 JRE/lib/security/cacerts 中,有几十个已建立的 CA 根。

标签: java keytool pki


【解决方案1】:

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

  • 您有一个您信任的证书颁发机构 (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 代码时,它应该可以正常运行。

【讨论】:

    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 2011-07-26
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2018-06-03
    • 1970-01-01
    相关资源
    最近更新 更多