java - 根据 keystore 验证 CSR

标签 java ssl glassfish keytool glassfish-4

我使用 keytool 生成了一个 keystore ,并从中生成了一个 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 列出 keystore 中安装的证书时,它会将所有证书报告为单独的证书,而不是一个链。

然后我尝试了其他方法...我在 OS X 中使用钥匙串(keychain)访问来生成一个包含整个证书路径的 p7b 文件,从根目录一直到我的证书。使用这种方法,我能够在钥匙串(keychain)访问中验证整个证书链是否有效。然后我尝试使用 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)

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

最佳答案

在通过别名“服务器”导入实际签名证书的步骤中删除“-trustcacerts”参数。它不是 CA 证书。

关于java - 根据 keystore 验证 CSR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24602963/

相关文章:

java - LWJGL VBO 在 Radeon HD 6670 上生成看似随机的顶点?

java - java中的泛型只是检查以确保这是正确的

c# - 使用 x509 证书保护 .svc 网络服务

java - 该模块尚未部署。- RESTFUL WEB SERVICE - GLASSFISH SERVER 4.0

jpa - 资源的 JNDI 查找失败

java - 使用 quaqua LAF 在 Swing Mac OSX 应用程序上获取未保存的点

java - 从 Android Activity 的后退按钮调用什么方法?

ubuntu - 如何通过 curl 解决 SSL 超时问题?

java - 如何从 Java keystore 中的证书链中仅删除一个证书

Glassfish vhost 仅提供静态内容。禁用 session 如何?