【问题标题】:Tomcat, OpenSSL, SSL error with keytool: Keystore was tampered with, or password was incorrectTomcat、OpenSSL、使用 keytool 的 SSL 错误:密钥库被篡改或密码不正确
【发布时间】:2021-06-15 21:16:02
【问题描述】:

我需要帮助,首先,在我找不到正确答案的任何 * 帖子中。

我正在尝试使用 KeytoolCertbot 在带有 SSL 的 tomcat 服务器中设置我的 Web 应用程序 首先,我使用 Certbot 并生成了各自的 .pem 文件(privkey.pem、fullchain.pem 等)。 之后我做了以下步骤:

使用 OpenSSL 将我的 privkey.pem 添加到 JKS

我的密码太简单了“123456”,不可能忘记。 (我只是在尝试) 之后,我将 pkcs12 转换为 JKS:

最后将chain.pem 添加到我的密钥库。在这一步中,我输入之前输入的密码。我得到了消息:

keytool 错误:java.io.IOException: Keystore 被篡改,或密码不正确

如果我使用连接器 8443 和我的密钥库在 Tomcat 服务器中编辑我的 server.xml 文件,当我启动服务器时,我会在 catalina.out 中遇到同样的错误。

【问题讨论】:

标签: java ssl tomcat openssl keytool


【解决方案1】:

MyDSKeyStore.jks 文件的密码是 '-destkeypass',这是由于 keytool 解析您使用的第二个命令行的方式:-deststorepass 应该是其次是密码。在您的情况下,后面是-destkeypass

备注:您的问题似乎不是 XY problem:您想使用 PEM 格式的证书配置 Tomcat SSL 连接器,因此您询问如何将 PEM 证书转换为 JKS。虽然您显示的过程几乎是正确的,但它在现代 Tomcat 上毫无用处(参见this answer):Tomcat 至少从 5.5 版开始支持 PKCS12 文件,并从 8.5 版开始支持 PEM 格式的证书。无需转换任何东西。

【讨论】:

  • 我做了你之前说的那个答案,但是我没有得到结果,所以我决定用这个方法
  • 你应该检查你的日志,可能你的文件权限有问题(私钥默认只有root可以读取,而Tomcat作为另一个用户运行)。
  • 我为 /etc/letsencrypt/live/ 做了 chmod 700 和 777,什么也没做,我的 catalina.out 没有显示任何错误消息 =(
  • 如果Starting ProtocolHandler ["https-jsse-nio-8443"] 后面没有Failed to start component...,那么一切正常。备注:/etc/letsencrypt/live主要是符号链接,重要的是/etc/letsencrypt/archive上的权限。
  • 感谢您为我提供了很多有用的信息!