【问题标题】:How i can ensure certificate(myAppCertificate.crt) i am importing to cacert already exists in cacert file or not?.我如何确保我导入到 cacert 的证书(myAppCertificate.crt)已经存在于 cacert 文件中?
【发布时间】:2012-06-30 23:05:48
【问题描述】:

如何确保我导入到 cacert 的证书(myAppCertificate.crt)已经存在于 cacert 文件中? 有关信息,我正在使用

导入证书

keytool -import -alias myAppca -file myAppCertificate.crt -keystore cacerts -v

出于测试目的,我尝试在 cacert 文件中再次添加已经存在的证书,但它没有给我任何异常/警告 该证书已经存在。 有没有办法在实际导入之前确认证书是否已经存在?

【问题讨论】:

    标签: java ssl https ssl-certificate


    【解决方案1】:

    如果您使用keytool -list -keystore cacerts,您将获得带有指纹的所有证书的列表。 (如果你使用 Java 6 的 keytool,你会看到 MD5 指纹,如果你使用 Java 7 的版本,你会得到 SHA-1 指纹,更好。)

    如果您使用keytool -printcert -file myAppCertificate.crt,您应该会看到证书指纹(包括 MD5 和 SHA-1)。

    如果您从该证书获得的值在列表中,则您的证书已经在密钥库中。

    (有关什么是指纹的更多详细信息,请参阅this question。)

    【讨论】:

    • 嗨 Bruno,实际上我要导入的证书是证书链 A---->B---->C(myCertificate)。根据我的理解,如果您提到的 commanbd 的输出包含任何证书(A、B 或 C)的指纹,那么我不需要导入证书。对吗?另一点是,我可以在 webbrowser 中看到 C 的指纹,以便在命令的输出中交叉验证它。但是我在哪里可以看到证书 A 和 B(在层次结构中高于 C)的指纹?
    • 通常情况下,您只需要在cacerts 中导入链的顶部(A)(除非您只想信任一个子树)。要查看每个证书的指纹,请将您的 crt 文件拆分为子文件(带有开始/结束分隔符)或使用可以显示中间证书指纹的浏览器(Chrome 和可能 IE 可以在 Windows 上执行此操作,他们称之为“证书详细信息中的指纹。)
    • 另一件事是命令“keytool -import -alias myAppca -file myAppCertificate.crt -keystore cacerts -v”确实导入了层次结构中的最低证书。例如在我的例子中它确实导入了C而不是 A。理想情况下,它应该在层次结构顶部导入证书不是吗? IE 和 Mozilla firefox 也显示了不同的认证路径。理想情况下,它们应该显示相同。对我来说,IE 的认证路径看起来是正确的,而不是 firefox。任何输入?
    • keytool -import 如果在文件中找到,则应导入第一个证书(因为它只是一个具有多个 BEGIN/END 块的文本文件)。通常将带有颁发者证书的链放在签名证书之后(更高权限最后),因为这是配置某些工具的方式。可能有不同的证书路径,因为某些 CA 有时会逐步更新其证书。
    • 我说的是 CA,而不是服务器的证书。您同时遇到的是服务器证书。您的 CA 预装了随您的操作系统或浏览器一起安装的最新更新。 IE 使用 Windows 的 CA,而 Firefox 使用自己的。
    【解决方案2】:

    您可以使用 keytool list 选项查看密钥库中的所有证书: keytool -list -v -keystore 密钥库文件

    【讨论】:

      猜你喜欢
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 2012-10-25
      • 2019-07-07
      • 2015-09-18
      • 2021-01-20
      • 1970-01-01
      相关资源
      最近更新 更多