针对密钥库验证CSR

时间:2014-07-07 04:16:52

标签: java ssl glassfish keytool glassfish-4

我使用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不匹配的密钥库的可能性。我只生成了一个密钥库和一个证书签名请求,所以我怀疑我选择了错误的密钥库。然而,是否有一个命令我可以运行来验证针对密钥库的证书签名请求,以便它告诉我是否有正确的密钥库?

2 个答案:

答案 0 :(得分:0)

在通过别名'server'导入实际签名证书的步骤中删除'-trustcacerts'参数。它不是CA证书。

答案 1 :(得分:0)

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