Tomcat8 无法检测到 Letsencrypt 更新的证书(但 Apache 可以)

Tomcat8 无法检测到 Letsencrypt 更新的证书(但 Apache 可以)

我有一台 Ubuntu 17.10 服务器,上面有 Apache 2.4.27 和 Tomcat 8.5.21,由于使用了 Letsencrypt 证书,两者均通过 HTTPS 提供服务。它已经运行了 3 个月,并且自动续订(默认cron)也起作用了。但在原始到期日期之后,我的 Apache 仍能使用续订后的证书正常运行,但 Tomcat8 仍在使用已过期的证书,因此我得到了不安全的连接我的浏览器上出现警告。

我尝试了force-reload我的 Tomcat8 服务,甚至重新启动了整个服务器,但没有成功。

这是我的 Tomcat8 上的 SSL 配置server.xml

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    SSLEnabled="true" scheme="https" secure="true" clientAuth="false"
    sslProtocol="TLSv1.2" keyAlias="tomcat"
    keystoreType="JKS"
    keystoreFile="/etc/letsencrypt/live/example.com/MyDSKeyStore.jks"
    keystorePass="PASSWORD" />

如果我尝试:

openssl s_client -connect 127.0.0.1:443 -showcerts

我看到我的 Apache 有效地使用了更新的证书,但对于 Tomcat8,在端口 8443 上:

openssl s_client -connect 127.0.0.1:8443 -showcerts 

[...] 验证错误:num=10:证书已过期 [...]

关于如何让我的 Tomcat 使用更新的证书,您有什么想法吗?

更新:

感谢评论,我发现 Tomcat 密钥库/etc/letsencrypt/live/example.com/MyDSKeyStore.jks没有受到续订的影响。所以我想这里真正的问题是如何在我的证书续订时自动更新此文件。

答案1

标准 Let's Encryptcertbot不支持 JKS 密钥存储格式,因此您的/etc/letsencrypt/live/example.com/MyDSKeyStore.jks文件是手动创建的,每次续订后都需要更新。您可以尝试使用certbot renew --deploy-hook来执行此操作,请查看其文档了解详情。

相关内容