【问题标题】:Validate CSR against keystore针对密钥库验证 CSR
【发布时间】:2014-07-07 04:16:51
【问题描述】:

我使用 keytool 生成了一个密钥库,并由此生成了一个 CSR:

keytool -genkey \
    -alias server \
    -keyalg RSA \
    -keysize 2048 \
    -keystore api_annacares_com.jks \
    -dname "CN=api.example.com, O=Acme Ltd, L=Sydney, ST=New South Wales, C=AU"
keytool -certreq \
    -alias server \
    -file api_example_com.csr \
    -keystore api_example_com.jks

我向 Comodo 提交了 CSR,并收到了我的 PositiveSSL 证书和中间证书。

我是这样导入的:

./glassfish4/bin/asadmin change-master-password --savemasterpassword=true
keytool -importkeystore \
    -srckeystore api_example_com.jks \
    -destkeystore glassfish4/glassfish/domains/domain1/config/keystore.jks
keytool -import -trustcacerts \
    -alias AddTrustExternalCARoot \
    -file AddTrustExternalCARoot.crt \
    -keystore glassfish4/glassfish/domains/domain1/config/keystore.jks
keytool -import -trustcacerts \
    -alias COMODORSAAddTrustCA \
    -file COMODORSAAddTrustCA.crt \
    -keystore glassfish4/glassfish/domains/domain1/config/keystore.jks
keytool -import -trustcacerts \
    -alias COMODORSADomainValidationSecureServerCA \
    -file COMODORSADomainValidationSecureServerCA.crt \
    -keystore glassfish4/glassfish/domains/domain1/config/keystore.jks
keytool -import -trustcacerts \
    -alias server \
    -file api_example_com.crt \
    -keystore glassfish4/glassfish/domains/domain1/config/keystore.jks

此时我没有收到任何错误,但是当我启动服务器并尝试使用 https 而不是 http 时,我从浏览器收到 SSL 连接错误。 Internet 上可用的其他诊断工具只是报告说没有 SSL 证书。当我使用 keytool 列出安装在密钥库中的证书时,它会将所有证书报告为单个证书而不是链。

然后我尝试了其他方法...我在 OS X 中使用 Keychain Access 生成了一个 p7b 文件,其中包含从根目录一直到我的证书的整个证书路径。使用这种方法,我能够在 Keychain Access 中验证整个证书链是否有效。然后我尝试使用 keytool 导入它。 (我重新安装了 GlassFish。)

./glassfish4/bin/asadmin change-master-password --savemasterpassword=true
keytool -importkeystore \
    -srckeystore api_example_com.jks \
    -destkeystore glassfish4/glassfish/domains/domain1/config/keystore.jks
keytool -importcert -v -trustcacerts \
    -alias server \
    -file api.example.com.p7b \
    -keystore glassfish4/glassfish/domains/domain1/config/keystore.jks

这次keytool产生了错误信息:

keytool error: java.lang.Exception: Failed to establish chain from reply
java.lang.Exception: Failed to establish chain from reply
        at sun.security.tools.KeyTool.establishCertChain(KeyTool.java:3375)
        at sun.security.tools.KeyTool.installReply(KeyTool.java:2583)
        at sun.security.tools.KeyTool.doCommands(KeyTool.java:998)
        at sun.security.tools.KeyTool.run(KeyTool.java:340)
        at sun.security.tools.KeyTool.main(KeyTool.java:333)

我想排除我使用的密钥库与 CSR 不匹配的可能性。我只生成了一个密钥库和一个证书签名请求,所以我怀疑我选择了错误的密钥库。不过,是否可以运行一个命令来验证针对密钥库的证书签名请求,以便它告诉我是否拥有正确的密钥库?

【问题讨论】:

    标签: java ssl glassfish keytool glassfish-4


    【解决方案1】:

    在通过别名“server”导入实际签名证书的步骤中去掉“-trustcacerts”参数。它不是 CA 证书。

    【讨论】:

      【解决方案2】:

      虽然我没有找到一种方法来根据密钥库验证 CSR 以确保它们匹配,但我确实解决了我的问题。我首先将密钥库导入 GlassFish 的密钥库,然后尝试导入证书。我首先将证书导入生成 CSR 的密钥库,然后将该密钥库导入 GlassFish 的密钥库,从而解决了这个问题。

      【讨论】:

      • 很难看出这将如何解决任何问题,除非有三个不同的密钥库在起作用。
      • 不,绝对不是。我自己也很困惑,但这不是我第一次与 SSL 和 GlassFish 作斗争,我怀疑这与我上次使用的解决方案相同,但忘记了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多