宝塔面板SSL证书管理:提升续期与部署效率的实操方法
手动维护多站点SSL证书容易遗漏续期导致业务中断。这里分享几个在宝塔面板中简化证书申请、自动续期与批量部署的实用做法,帮你减少重复操作和证书过期风险。
维护过几十个站点的SSL证书后,我发现宝塔面板虽然自带 Let's Encrypt 申请入口,但默认配置并不总是靠谱,证书过期前的周末收到告警是常有的事。后来把申请、续期、部署几个环节梳理了一遍,整理出这套基本靠面板原生功能就能搞定的流程,不需要额外装复杂插件,大幅提升了SSL管理效率。
计划任务续期别只依赖默认设置
面板自带的 Let's Encrypt 续签任务有时会失效,特别是站点启用了强制 HTTPS 或者走了 CDN 之后。建议自己进“计划任务”检查有没有续签项,没有的话手动加一个 Shell 脚本任务。
脚本内容可以直接调用 acme.sh:先 export 必要的环境变量,然后执行 /root/.acme.sh/acme.sh --renew-all,最后加上 /etc/init.d/bt reload 或者 nginx -s reload 让服务重新加载证书。执行周期设成每天凌晨跑一次,日志最好重定向到 /var/log/ssl-renew.log 这类固定路径,方便事后排查。
如果第二天发现证书没更新,先翻日志看是不是 .well-known 目录验证被拦截了。常见原因有三个:CDN 节点缓存了旧响应、站点开了全站跳转导致 80 端口验证循环、或者 Nginx 规则把验证目录指向了错误路径。排查起来比较耗时,这时候不如直接切 DNS 验证。
内网或CDN场景优先用DNS验证
服务器在内网、前面挂了 WAF,或者 80/443 端口被占用时,HTTP 验证基本跑不通,DNS 验证反而更稳。在站点 SSL 设置里切到 DNS 验证,选择对应的域名服务商,填入 API 密钥就行。
以阿里云为例,不要直接用主账号的 AccessKey。去 RAM 访问控制里建个子用户,只给 AliyunDNSFullAccess 权限,复制 AccessKey ID 和 Secret 填到面板里。验证通过后面板会自动添加 TXT 记录,签发完再自动清理,全程不用人工干预。
这种方法还能直接申请通配符证书。申请时主域名填 *.example.com,一张证书就能罩住所有二级域名,后续续期也只需要维护这一个,比每个子域名单独申请省事得多。
同IP多站点复用证书
如果多个站点跑在同一个 IP 上,而且主域名相同,没必要每个站点都走一遍申请流程。先在主站点把证书申请下来,然后到其他站点的 SSL 设置页,点“从其他站点导入”,选中刚才的站点就能直接复用证书文件。
要是多个域名之间没什么关联,更适合申请多域名证书。在申请界面打开“多域名”开关,把需要保护的域名逐行填进去。注意所有域名必须同时通过验证,要么都用 DNS 验证,要么都能正常访问 80 端口。签发下来是一张证书,部署到任意站点后,记得回“网站”列表里把相关站点批量重载一下配置,否则 Nginx 可能还在读旧缓存。
证书生效后顺手优化TLS配置
证书装上只是第一步,协议版本和加密套件也得检查。进站点配置文件,找到 ssl_protocols 那行,改成只留 TLSv1.2 TLSv1.3,把 TLSv1.0 和 1.1 删掉。ssl_ciphers 可以套一个兼顾兼容性和安全性的中间配置,直接贴进去就行。