如何在 Java 密钥库中导入现有的 X.509 证书和私钥以在 SSL 中使用?

新手上路,请多包涵

我在 ActiveMQ 配置中有这个:

 <sslContext>
        <sslContext keyStore="file:/home/alex/work/amq/broker.ks"
 keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts"
 trustStorePassword="password"/>
</sslContext>

我有一对 X.509 证书和一个密钥文件。

如何导入这两个以便在 SSL 和 SSL+stomp 连接器中使用它们?我可以谷歌搜索的所有示例总是自己生成密钥,但我已经有了密钥。

我努力了

keytool -import  -keystore ./broker.ks -file mycert.crt

但这只会导入证书而不是密钥文件并导致

2009-05-25 13:16:24,270 [localhost:61612] ERROR TransportConnector - Could not accept connection : No available certificate or key corresponds to the SSL cipher suites which are enabled.

我尝试连接证书和密钥,但得到了相同的结果。

如何导入密钥?

原文由 Aleksandar Ivanisevic 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 719
2 个回答

信不信由你,keytool 不提供将私钥导入密钥库等基本功能。您可以通过将带有私钥的 PKSC12 文件合并到密钥库来尝试此 解决方法

 keytool -importkeystore \
  -deststorepass storepassword \
  -destkeypass keypassword \
  -destkeystore my-keystore.jks \
  -srckeystore cert-and-key.p12 \
  -srcstoretype PKCS12 \
  -srcstorepass p12password \
  -alias 1

或者只是使用来自 IBM 的对用户更友好的 KeyMan 来处理密钥库,而不是使用 keytool。

原文由 Matej 发布,翻译遵循 CC BY-SA 4.0 许可协议

我使用了在其他答案中链接的评论/帖子中找到的以下两个步骤:

第一步:将 x.509 证书和密钥转换为 pkcs12 文件

openssl pkcs12 -export -in server.crt -inkey server.key \
               -out server.p12 -name [some-alias] \
               -CAfile ca.crt -caname root

注意: 确保在 pkcs12 文件上设置了密码 - 否则当您尝试导入它时会出现空指针异常。 (以防其他人有这种头痛)。 ( 感谢 jocull!

注意 2: 您可能想要添加 -chain 选项以保留完整的证书链。 ( 感谢 Mafuba

第二步:将 pkcs12 文件转换为 Java 密钥库

keytool -importkeystore \
        -deststorepass [changeit] -destkeypass [changeit] -destkeystore server.keystore \
        -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass some-password \
        -alias [some-alias]

完成的

可选步骤零:创建自签名证书

openssl genrsa -out server.key 2048
openssl req -new -out server.csr -key server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

常见问题解答:我收到错误 IOException: keystore password was incorrect

如果您使用的是 OpenSSL 3.0 和比 Java8u302 更新的 JDK 并收到以下错误:

 keytool error: java.io.IOException: keystore password was incorrect

您可能会发现 openssl 中的默认密码发生了变化。以下 Stack Overflow Answer 提供了答案。也许要感谢托马斯

干杯!

原文由 reto 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题