【问题标题】:How to resolve keytool error: java.lang.Exception: Input not an X.509 certificate如何解决 keytool 错误:java.lang.Exception:输入不是 X.509 证书
【发布时间】:2020-12-31 19:54:07
【问题描述】:

我从以下安全 URL 获取公共证书:

openssl s_client -showcerts -verify 5 -connect portal.myshop.com:9043 < /dev/null | openssl x509 -pubkey -noout>/home/app/portalpublic.crt

然后使用以下命令将公共证书添加到信任存储:

keytool -import -alias portalpubliccert -file /home/app/portalpublic.crt -storetype JKS -keystore cacerts

但是,我这样做时遇到以下错误:

Enter keystore password:
keytool error: java.lang.Exception: Input not an X.509 certificate

你能建议我如何解决这个问题吗?

cat -ev /home/app/portalpublic.crt

-----BEGIN PUBLIC KEY-----$
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6iAD/I9U2kKAqEokzEkA$
b2QmPQb73A/bA9YD+I+pqEkqtwQmpe6Oiu3+mx2ppA/NXG2QqNb4IfpVEgRrQygG$
6giuhMikPRq6PQ7wywfxWaPkJDDcrLg7Dn8v3l5XgpeaFZN1KSGMDpdrsEpSlxFS$
ZaxDKUfySyjppsC9GV4Lv1IXET5sSmfYw2RqCkO/Q8zcItVkzjZIBw8Y/eVrloGm$
AnQj89cLJbDFq2VogVjMGdOSGQc7cQ0ZZAyrv0XV4hKpi9taiNNXv0ZKWuvk1oFo$
GyfildXPnVKORxSx6d865kj93fCsEXlLjJ1c8xHVr992hEWlWVthByqpTB7DVccj$
xQIDAQAB$
-----END PUBLIC KEY-----$

【问题讨论】:

  • 公钥不是证书。离题。

标签: java certificate runtime-error keytool truststore


【解决方案1】:

Meta:这不是编程或开发问题,问题或问题,现在很可能已关闭。它可能适用于 security.SX 或超级用户。

我从以下安全 URL 获取公共证书:

openssl s_client ... | openssl x509 -pubkey ...

不,你没有。你得到的是公钥而不是证书。公钥只是公钥而不是证书,证书不仅仅是公钥,尽管证书(此处的类型)包含公钥。此外,您没有“从 URL”获得它。您是从 域名 中获取的,或者更准确地说,是从位于或显然位于域名处的主机获取的。域名不是 URL; 一些 URL(不是全部!)包含一个域名,但它们是不同的东西。

keytool -import ... -file ...

keytool -import[cert] 需要证书。公钥不是证书。这就是错误消息说输入不是证书的原因——因为它不是。

Java 密钥库可以将证书(特别是 X.509/PKIX 类型的证书)存储为trustedCertEntry,但它不能存储裸公钥。如果您想将来自给定 URL 的证书存储在密钥库中,请获取然后导入证书——而不是公钥。如果由于某种原因您只想存储公钥,如果它没有链接到证书中的其他信息,这基本上是无用的,请不要使用 Java 密钥库,也不要使用keytool

【讨论】:

  • 知道了,戴夫,谢谢,但你能分享从 URL 获取证书的命令吗?同时我会在网上搜索。
  • 我尝试了echo | openssl s_client -servername myshop -connect portal.myshop.com:9043 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' &gt; portalpublic.crt,但得到了同样的错误。
  • 这应该有效,并且通常对我和(根据帖子)至少数千甚至数百万其他人有效。查看文件:它实际上是否包含预期的 BEGIN 行、base64 数据和 END 行?您可以将其添加到您的 Q 中(显然,如果您的服务器的所有详细信息都完全保密,您就不能)?
猜你喜欢
  • 2014-11-16
  • 2013-01-31
  • 1970-01-01
  • 2014-08-16
  • 2023-03-21
  • 2011-07-09
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
相关资源
最近更新 更多