You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat平滑更新SSL证书:同时服务新旧证书的配置方法

Tomcat同时提供新旧证书的解决方案

可以实现,推荐使用Tomcat的**TLS Server Name Indication (SNI)**多证书配置方案,无需修改端口就能兼容新旧客户端。

核心配置思路

Tomcat 8.5及以上版本支持在同一个Connector下通过<SSLHostConfig>和<Certificate>标签显式指定多个证书,替代原来单一的keyAlias配置。服务器在TLS握手时会向客户端提供所有配置的证书选项,客户端会自动选择自己信任的证书——未更新的客户端选旧证书,已更新的选新证书。

具体配置修改

替换你原来的Connector配置为以下内容:

<Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8080" acceptCount="100" maxConnections="400" maxThreads="2000" maxHttpHeaderSize="65536"
           scheme="https" secure="true" SSLEnabled="true"
           clientAuth="false" sslProtocol="TLS">
    <!-- 替换为你的实际域名 -->
    <SSLHostConfig hostName="your-domain.com">
        <!-- 新证书配置 -->
        <Certificate certificateKeystoreFile="keystore.p12" 
                     certificateKeystorePassword="****" 
                     certificateAlias="alias_new"/>
        <!-- 旧证书配置 -->
        <Certificate certificateKeystoreFile="keystore.p12" 
                     certificateKeystorePassword="****" 
                     certificateAlias="alias_old"/>
    </SSLHostConfig>
</Connector>

关键注意事项

  1. 版本要求:必须使用Tomcat 8.5或更高版本,更早的版本不支持同一个SSLHostConfig下配置多个Certificate。
  2. 密钥库验证:确保你的keystore.p12中确实包含alias_new和alias_old两个有效私钥条目,可以用keytool -list -v -keystore keystore.p12命令检查。
  3. 失败原因解释:当你移除keyAlias时,Tomcat会默认加载密钥库中第一个被找到的有效证书,不会自动遍历所有条目,因此必须通过<Certificate>标签显式声明每个需要使用的证书。

备选方案(旧Tomcat版本)

如果你的Tomcat版本低于8.5,可以配置两个独立的Connector,分别绑定不同端口,各自指定keyAlias:

<!-- 新证书端口 -->
<Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8080" acceptCount="100" maxConnections="400" maxThreads="2000" maxHttpHeaderSize="65536"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="keystore.p12" keystorePass="****" keyAlias="alias_new"
           clientAuth="false" sslProtocol="TLS"/>

<!-- 旧证书端口 -->
<Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" acceptCount="100" maxConnections="400" maxThreads="2000" maxHttpHeaderSize="65536"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="keystore.p12" keystorePass="****" keyAlias="alias_old"
           clientAuth="false" sslProtocol="TLS"/>

这种方案需要告知旧客户端暂时使用新端口,直到完成证书更新,不如SNI方案优雅。

内容的提问来源于stack exchange,提问作者Farouk Osama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:25:25