SSL证书冲突源于宝塔多站点共用443端口时证书错配,主因是SNI依赖域名精确匹配而宝塔“就近复用”证书,需检查配置路径、Subject/SAN一致性、域名绑定与SSL页签同步、acme.sh续签后路径更新及SNI客户端兼容性问题。

SSL证书冲突时,nginx 报错 SSL_CTX_use_certificate:ca md too weak 或 no matching server name
这类错误不是证书本身坏了,而是宝塔在多个站点共用同一端口(443)时,把本该配给 site-a.com 的证书错塞给了 site-b.com。根本原因是:Nginx 的 SNI 机制依赖域名精确匹配,而宝塔的证书绑定逻辑会“就近复用”——只要某个站点启用了 SSL、且没显式指定证书,它就可能被分配到别的站点的证书文件。
- 检查
/www/server/panel/vhost/nginx/下每个站点配置文件,确认ssl_certificate和ssl_certificate_key指向的路径是否真实存在、且属于当前域名 - 别信面板里“已启用HTTPS”的绿勾——它只表示该站点配置了 SSL 段,不保证证书内容正确
- 用
openssl x509 -in /path/to/cert.pem -text -noout | grep "Subject:"手动核对证书 Subject 是否含当前域名
宝塔后台「域名绑定」列表和「SSL」页签不同步怎么办
这是最常被忽略的冲突源头:你删了某个子域名(比如 api.example.com),但它的 SSL 证书还在「SSL」页签里挂着;或者新增了 www.example.com 却没去「SSL」页签里重新申请或绑定。
- 进「网站」→ 点击站点 → 「域名管理」:这里列的是 Nginx
server_name实际监听的域名,必须和证书 SAN(Subject Alternative Name)完全覆盖 - 进「SSL」页签:这里每个证书都有「绑定域名」按钮,点进去看它实际绑定了哪些站点——一个证书可以绑多个站点,但前提是这些站点的域名全在该证书的 SAN 列表里
- 如果用了泛域名证书(
*.example.com),注意它不匹配example.com(主域名需单独加进 SAN)
用 acme.sh 手动续签后,宝塔仍用旧证书
宝塔默认只认自己申请的证书路径(/www/server/panel/vhost/cert/xxx/),如果你用命令行工具更新了证书但没同步路径或没重载配置,Nginx 还在读旧文件。
- 确认新证书路径是否和宝塔配置中
ssl_certificate指向的一致;若不一致,要么改 Nginx 配置,要么把新证书复制过去并chown www:www - 执行
bt reload或手动nginx -t && systemctl reload nginx,仅重启面板没用 - acme.sh 默认不会自动更新宝塔的证书记录,所以「SSL」页签里显示的过期时间不会变,得手动点「设置」→「同步证书信息」
多站点共用 IP 时,SNI 不生效导致浏览器警告
老版本安卓(≤4.4)、Windows XP IE、或某些企业防火墙会忽略 SNI,强制走第一个加载的 HTTPS 配置——这时如果第一个站点是 old-site.com,而用户访问的是 new-site.com,就会看到证书不匹配警告。
- 这不是宝塔 bug,是客户端限制;现代浏览器基本无此问题,但内网测试常踩坑
- 临时解法:确保
/www/server/panel/vhost/nginx/下配置文件按字母序排列,把最重要的主站放在最前面(如命名成a-main.conf) - 长期方案:为关键站点单独分配 IP,或升级客户端环境
证书冲突的本质是「域名—证书—配置」三者没对齐,而宝塔把其中一环(证书绑定)做成图形化操作后,反而让人更容易忽略底层路径和 SAN 的硬约束。


















