Spring Boot DevTools远程模式抛出CertificateException: No name matching localhost found
错误根因
该报错属于SSL握手阶段的主机名校验失败:服务端配置的HTTPS证书的主体备用名称(SAN)中没有包含localhost,当你使用localhost作为地址连接远程DevTools服务端时,Java的SSL校验逻辑识别到证书和访问的主机名不匹配,直接阻断了连接。
解决方法
你可以根据自身场景任选下面一种方案解决:
- 方案1:更换访问地址为证书匹配的域名/IP
确认服务端SSL证书绑定的域名或者IP,将RemoteSpringApplication启动参数中的访问地址从localhost替换为证书实际支持的地址即可。 - 方案2:开发环境临时关闭SSL主机名校验
给RemoteSpringApplication的启动配置添加JVM参数即可跳过主机名校验,仅建议开发测试场景使用:-Dspring.devtools.remote.client.disable-ssl-hostname-verification=true - 方案3:更新服务端证书
重新生成服务端的SSL证书,生成时将localhost添加到证书的主体备用名称(SAN)中,比如使用keytool生成证书时追加参数:-ext san=dns:localhost,ip:127.0.0.1 - 方案4:本地调试改用HTTP协议
如果是本地开发场景,可以直接关闭服务端的SSL配置,将访问地址改为HTTP协议开头,完全规避SSL校验问题。
注意事项
关闭SSL主机名校验的配置仅可在开发测试环境使用,生产环境开启会有中间人攻击的安全风险。
内容的提问来源于stack exchange,提问作者IgalHaddad
相关产品推荐
相关产品推荐

