导入 SSL 证书时出错:不是 X.509 证书

2022-08-31 20:27:49

我正在尝试根据这篇文章更新SSL证书。

我是证书中的新手,所以我遵循了本指南。但是,当我输入时

keytool -keystore mycacerts -storepass changeit -importcert -file "C:\Users\Noks\Desktop\cacerts.pem" -v

我收到错误:

keytool error: java.lang.Exception: Input not an X.509 certificate
java.lang.Exception: Input not an X.509 certificate
        at sun.security.tools.KeyTool.addTrustedCert(KeyTool.java:1913)
        at sun.security.tools.KeyTool.doCommands(KeyTool.java:818)
        at sun.security.tools.KeyTool.run(KeyTool.java:172)
        at sun.security.tools.KeyTool.main(KeyTool.java:166)

我该如何解决这个问题?


答案 1

您的 cacerts.pem 文件是否包含单个证书?由于它是一个PEM,看看它(使用文本编辑器),它应该从

-----BEGIN CERTIFICATE-----

并以 结尾

-----END CERTIFICATE-----

最后,要检查它是否损坏,请掌握openssl并使用

openssl x509 -in cacerts.pem -text


答案 2

许多 CA 将提供 PKCS7 格式的证书。

根据Oracle文档,keytool commmand可以处理PKCS#7,但有时它会失败。

keytool 命令可以导入 X.509 v1、v2 和 v3 证书,以及由该类型的证书组成的 PKCS#7 格式的证书链。要导入的数据必须以 Internet RFC 1421 标准定义的二进制编码格式或可打印编码格式(也称为 Base64 编码)提供。在后一种情况下,编码必须在开头由以 -----BEGIN 开头的字符串限定,并在末尾由以 -----END 开头的字符串限定。

如果无法导入 PKCS7 文件,请尝试将其从 PKCS7 转换为 X.509:

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer