宝塔面板不会自动识别手动放入 /www/server/panel/vhost/cert/ 的证书,必须满足四重条件:①路径为 /www/server/panel/vhost/cert/域名/ 下的 fullchain.pem 和 privkey.pem;②权限分别为644和600;③属主为 www:www;④在ssl设置中点击“从列表选择”手动触发加载。

宝塔面板不会自动识别你手动丢进 /www/server/panel/vhost/cert/ 目录的证书文件,必须满足路径、命名、权限、属主、面板操作四重条件才能加载。
证书文件必须放在域名专属子目录下
宝塔只认 /www/server/panel/vhost/cert/你的域名/ 这个结构,不是平铺在 cert 根目录,也不是放错一级。比如域名是 example.com,正确路径是:
/www/server/panel/vhost/cert/example.com/fullchain.pem /www/server/panel/vhost/cert/example.com/privkey.pem
常见错误包括:
- 把证书直接扔进
/www/server/panel/vhost/cert/,没建子目录 - 子目录名写成
example.com.crt或带下划线、大写字母(如Example.Com) - 用了
certificate.pem、key.pem等非标准名,面板只认fullchain.pem和privkey.pem
文件权限与属主必须严格匹配
即使路径和名字都对,权限或属主错一个,面板也会静默跳过:
-
fullchain.pem权限必须是644(chmod 644 /www/server/panel/vhost/cert/example.com/fullchain.pem) -
privkey.pem权限必须是600(chmod 600 /www/server/panel/vhost/cert/example.com/privkey.pem) - 两个文件属主必须是
www(chown www:www /www/server/panel/vhost/cert/example.com/*.pem) - 子目录
example.com本身也建议设为www:www,避免读取失败
面板里必须手动触发“从列表选择”
上传完文件 ≠ 面板已加载。宝塔不轮询扫描,也不自动索引,必须人工点一下:
- 进入「网站」→ 找到对应站点 → 「设置」→ 「SSL」
- 在「其他证书」区域,点击「从列表选择」(不是「保存」,也不是「部署」)
- 此时面板才会去读取该域名子目录下的
fullchain.pem和privkey.pem - 如果选中后提示“证书格式错误”,大概率是
fullchain.pem内容顺序不对:第一段必须是你的域名证书,第二段是 R3(Let’s Encrypt 中间证书),第三段是 ISRG Root X1;可用openssl x509 -in fullchain.pem -text -noout | head -20检查开头是否为CN = example.com
新版宝塔(8.0+)不再读取独立证书链文件
如果你之前习惯把中间证书单独存为 chain.pem 并在 Nginx 配置里用 ssl_trusted_certificate 指向它,现在要改掉:
- 新版宝塔只依赖
fullchain.pem的内容顺序,不再解析额外的链文件 - 不要在面板 SSL 设置里勾选「使用证书链」或试图上传
chain.pem,它会被忽略 - 验证实际返回链是否完整:运行
openssl s_client -connect example.com:443 -showcerts,看输出中是否有三段 Base64 编码证书,且第二段 Subject 是O = Let's Encrypt, CN = R3
最容易被忽略的是「从列表选择」这一步——很多人传完文件就以为完事了,结果面板根本没读。另外,系统时间偏差超过 5 分钟也会导致证书被判定为无效,哪怕路径全对,也要先用 timedatectl status 确认时间同步正常。











