我在 Centos 上有一个正在运行的 Tomcat 应用程序,它使用即将过期的 SSL 证书。
我已经使用 keytool 创建了一个 CSR:
keytool -certreq -keyalg RSA -alias my_alias -keystore keystore.jks -file nov19.csr
然后将 CSR 粘贴到 Gandi 以获取新的 SSL 证书。
然而 Gandi 现在坚持要求我提供一份全新的(即不同于上次更新的) CSR。
所以我理解这意味着我必须生成一个新的私钥/公钥对 - 这是正确的吗?
如何在不中断应用程序访问的情况下做到这一点?
答案1
是的,您需要生成一个新的密钥对。
为了尽量减少服务中断,请将密钥对放入新的密钥库中,注意使用与以前相同的别名。当您获得新证书时,只需切换磁盘上的密钥库文件即可。
Tomcat 不会立即重新加载文件。为了触发重新加载,您需要通过以下方式访问 Tomcat 实例JMXssh
。如果您可以使用X 转发访问服务器,只需运行:
jconsole
使用 Tomcat 用户的凭据。您需要在 MBeans 选项卡上找到一个名为 的 bean,Catalina:type=ThreadPool,name="jsse-nio-443"
然后执行操作reloadSslHostConfigs
。
如果您不能使用 jconsole,还有其他方法可以访问 JMX(Tomcat Manager 中还有一个 JMXProxy servlet)。
答案2
旧证书将继续有效,直至过期。从生成新证书到旧证书过期,新证书的有效期将有一定的重叠(如果您及时创建证书)。
实际上,您会希望让 Web 应用程序在给定的时间点使用新证书而不是旧证书 - 最好是在流量较少的时期。
我不是 Tomcat 和 Java 密钥库方面的专家,但我怀疑您可以让 Web 应用程序在同一个密钥库中查找具有不同别名的证书;将指向旧证书的别名替换为指向密钥库中新证书的别名;或者将整个密钥库替换为新密钥库。进行此更改后,您可能需要重新加载或重新启动 Web 应用程序。