我正在尝试按照this post更新SSL证书。
我是个新手,所以我跟着this guide。但是,当我进入
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)
我该怎么办?
6条答案
按热度按时间wko9yo5t1#
您的caceton.pem文件是否只持有一个证书?由于它是一个PEM,请查看它(使用文本编辑器),它应该以
-----BEGIN CERTIFICATE-----
并终结于
-----END CERTIFICATE-----
最后,为了检查它是否被破坏,可以使用openssl并打印它的详细信息
openssl x509 -in cacerts.pem -text
编辑
正如@stefan-seidel在下面提到的,尝试使用
openssl x509 -in broken.pem -out correct.pem
vktxenjb2#
许多CA将提供PKCS 7格式的证书。
根据Oracle文档,keytool命令可以处理PKCS#7,但有时会失败
keytool命令可以导入X.509 v1、v2和v3证书,以及由该类型的证书组成的PKCS#7格式的证书链。要导入的数据必须以Internet RFC 1421标准定义的二进制编码格式或可打印编码格式(也称为Base64编码)提供。在后一种情况下,编码必须在开始时以--BEGIN开头的字符串为界,在结束时以-END开头的字符串为界。
如果PKCS 7文件无法导入,请尝试将其从PKCS 7转换为X.509:
jutyujz03#
这似乎是一个古老的主题,但我会在这里添加我的经验。我也试着安装一个证书,得到了这个错误。然后我用txt编辑器打开cer文件,注意到每行末尾都有一个额外的空格(字符)。删除这些行允许我导入证书。
希望这对别人有价值。
4xrmg8kj4#
正如这个问题的其他各种答案所示,这个错误消息有许多不同的可能原因。发生在你身上的原因可能与发生在我身上的原因完全不同。不幸的是,错误消息完全没有指出问题的实际来源,因此它对故障排除完全没有帮助。事实上,这完全是误导。
所以,而不是给你从这个错误消息的无数可能的原因,我会做的是告诉你如何解决这个问题,以找出是什么原因导致它在您的特定情况.
在工作中,我们通常使用以下两个命令来使一些软件与各种服务器进行对话,例如使IntelliJ IDEA与我们的内部maven存储库进行对话:
现在,有时会发生的情况是,
keytool -printcert
命令无法完成其工作,要么是由于配置错误,要么仅仅是因为临时连接问题,例如防火墙阻止它,用户忘记启动他的VPN,等等。这是一个生活的事实,这可能发生。这其实不是问题所在问题是,当愚蠢的工具遇到这样的错误时,它不会将错误消息发送到标准错误设备,而是将其发送到标准输出设备!
结果是这样的:
public.crt
文件现在包含的不是键,而是错误消息keytool error: java.lang.Exception: No certificate from the SSL server
。public.crt
,并找到错误消息的文本,而不是其中的键,因此它失败了,说keytool error: java.lang.Exception: Input not an X.509 certificate
。底线是:在
keytool -printcert ... > public.crt
之后,总是转储public.crt
的内容,以确保它实际上是一个键,而不是在继续运行keytool -import ... -file public.crt
之前的错误消息oxosxuxt5#
我改变了三件事,然后它工作:
1.有一列空格,我把它们去掉了
1.将换行符从Windows CRLF更改为Linux LF
1.删除了结尾处的空行。
cld4siwp6#
我必须删除
-----BEGIN CERTIFICATE-----
之后的新行之前的空格。