通过 CLI 针对 Java 证书存储验证证书

Posted

技术标签:

【中文标题】通过 CLI 针对 Java 证书存储验证证书【英文标题】:Verify certificate against Java certificate store via CLI 【发布时间】:2010-10-01 01:03:40 【问题描述】:

如何通过命令行根据 Java 证书存储验证 X509(或 DER 格式)证书?

我研究过使用 keytool 实用程序,但它看起来只处理导入/导出/显示功能(无验证)。

编辑:看起来keytool 可以用于验证,但前提是尝试导入。我想问这个问题的更好方法是是否可以使用更被动的方法(例如:不修改密钥库)。谢谢!

【问题讨论】:

【参考方案1】:

此页面可能过于简单:

http://java.sun.com/docs/books/tutorial/security/toolfilex/rstep1.html

但看起来即使使用 keytool 导入也不会真正验证证书。我没有看到任何关于验证传入证书的签名与另一个受信任证书的签名的描述。

jarsigner 将验证已签名 jar 上的签名,但不会验证用于签署 jar 的证书上的签名。

恐怕您要么必须编写一个工具来进行验证,要么寻找一个商业工具来进行验证。我认为一些 PKI 工具包会有一个证书验证工具可以做到这一点。

【讨论】:

我认为 Keytool 不支持我正在尝试做的事情是对的。我们最终选择制作自己的实用程序,特别是因为 Keytool 没有签名,我们希望能够在运行之前验证可执行文件。 分享这个工具会很棒!【参考方案2】:

您可以使用keytoolexport 所需的证书(那些在您需要验证的链中的证书)从 Java 密钥库到 X.509 文件中。然后,将它们连接到一个文件中。最后使用openssl进行验证。

openssl verify -CAfile concatenated-certs.crt cert-to-verify.crt

这不是一个完美的解决方案,因为它涉及从信任库中弹出证书,但考虑到您的开始,它应该可以工作。

【讨论】:

这对我有用,但请注意,openssl 需要 PEM 格式的证书而不是 DER(这似乎是 keytool 默认使用的)

以上是关于通过 CLI 针对 Java 证书存储验证证书的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中访问windows证书存储?

在java中怎么验证ssl证书的有效性

证书验证失败怎么回事?

OpenSSL 和 WL/Java 的证书验证

登录 Azure 容器注册表时 SSL 证书验证失败

通过 HTTPS 上的客户端证书对 WCF 请求进行身份验证