升级Spring Boot 3+Java17后Tomcat启动失败:SSLHostConfig重复问题
Spring Boot 3(Java 17)启动SSL报错:Multiple SSLHostConfig elements were provided for [default]
问题现象
升级到Spring Boot 3搭配Java 17后,应用启动抛出如下异常:
java.lang.IllegalArgumentException: Multiple SSLHostConfig elements were provided for the host name [_default_]. Host names must be unique. at org.apache.tomcat.util.net.AbstractEndpoint.addSslHostConfig(AbstractEndpoint.java:288) at org.apache.tomcat.util.net.AbstractEndpoint.addSslHostConfig(AbstractEndpoint.java:244) at org.apache.coyote.http11.AbstractHttp11Protocol.addSslHostConfig(AbstractHttp11Protocol.java:742)
当前仅在application.yaml中配置了:
server: port: 8443 ssl: enabled: true
原因分析
这个问题的核心是Tomcat版本升级带来的校验规则变化:
- Spring Boot 3默认内嵌Tomcat 10.1.x,该版本对
SSLHostConfig的唯一性校验比旧版本更严格,不允许重复注册针对_default_主机的SSL配置。 - 常见触发场景:
- 项目中存在自定义Tomcat配置类(比如实现
TomcatServletWebServerFactoryCustomizer),手动添加了SSLHostConfig,同时Spring Boot自动配置模块又根据server.ssl配置生成了默认的SSLHostConfig,两者冲突。 - 依赖的第三方starter或配置文件中,已经隐式配置了SSL相关的
SSLHostConfig,和当前server.ssl.enabled=true的配置重复注册了默认主机的SSL规则。 - 仅开启
server.ssl.enabled=true但未配置完整证书信息(如key-store、key-store-password)时,Tomcat内部自动补全默认配置的逻辑可能触发重复添加。
- 项目中存在自定义Tomcat配置类(比如实现
快速排查方向
- 检查项目中是否存在自定义Tomcat配置类,排查是否手动添加了
SSLHostConfig实例。 - 核对依赖树,确认是否有第三方依赖自动配置了SSL。
- 补充完整的SSL证书配置(指定密钥库路径、密码等),避免Tomcat生成不完整的默认配置导致冲突。
内容的提问来源于stack exchange,提问作者Tanmoy Banerjee
相关产品推荐
相关产品推荐

