登录
首页 >  文章 >  php教程

宝塔部署SSL证书及Let's Encrypt自动更新教程

时间:2026-05-22 22:52:20 302浏览 收藏

本文深入解析了在宝塔面板中部署和维护Let's Encrypt SSL证书的全流程与高频痛点,直击申请失败、HTTPS异常、自动更新失效等真实运维场景——从DNS解析验证、80端口冲突、权限配置、CDN干扰,到Nginx重载失败、混合内容警告、泛域名证书的手动干预及路径错位等隐蔽陷阱,提供可落地的逐项排查逻辑与关键命令,帮你告别“点一下没反应”“证书更新了却还是不安全”的无效操作,真正实现稳定、自动、可靠的HTTPS长期运行。

宝塔面板如何部署SSL证书_配置Let\'s Encrypt自动化更新

点“申请”按钮没反应或提示“获取域名验证失败”

宝塔的 Let’s Encrypt 申请依赖域名 DNS 解析和服务器网络连通性,不是点一下就完事。常见卡点是:域名还没解析到当前服务器 IP、80 端口被防火墙或其他服务(比如 Nginx 已启动但没配好)占着、或者宝塔后台本身没权限访问 acme.sh 所需的临时目录。

  • 先确认域名 A 记录已生效(ping yourdomain.com 返回的是你这台服务器的公网 IP)
  • 检查 80 端口是否空闲:netstat -tuln | grep :80,如果有进程占用,要么停掉它,要么在宝塔里勾选「使用 DNS 验证」(绕过 80 端口)
  • 确保宝塔运行用户(通常是 www)对 /www/server/panel/vhost/cert/ 有读写权限,否则 acme.sh 写不了证书文件
  • DNS 验证方式需要你提前在域名后台配置好 API(如阿里云 DNS 的 AccessKey),否则“自动验证”会一直卡在“等待 DNS 记录生效”

SSL 配置后网站打不开或显示不安全

证书装上了,不代表 HTTPS 就跑起来了。核心问题是 Nginx/Apache 没正确加载证书路径,或没强制跳转,浏览器仍走 HTTP。

  • 进宝塔 → 网站 → 设置 → SSL → 确认「证书」和「私钥」两个文本框里的内容完整且无乱码(尤其注意开头结尾的 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 是否齐全)
  • 必须开启「强制 HTTPS」,否则用户手动输 http:// 还是走明文;这个开关实际是在 Nginx 配置里加了 301 跳转,别手动生成配置覆盖掉
  • 如果用了 CDN(如 Cloudflare),要关掉 CDN 的 HTTPS 中转,或把源站证书设为「Full(strict)」模式,否则宝塔配的证书对访客不可见
  • 检查浏览器控制台有没有混合内容警告(Mixed Content),说明网页里还有 http:// 的资源链接,得全改成 //https://

证书没自动更新或更新后没生效

Let’s Encrypt 证书默认 90 天过期,宝塔靠内置的 cron 任务每天凌晨调用 acme.sh --renew。但这个机制很脆,一出错就静默失败。

  • 看定时任务列表里有没有这一条:0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null;没有就手动加,路径必须和你系统里 acme.sh 实际位置一致
  • 更新成功后,acme.sh 默认只更新证书文件,**不会自动重载 Nginx**;宝塔会在 renew 后触发 reload,但如果 Nginx 配置语法错误,reload 失败,HTTPS 就突然挂了——所以每次更新后建议手动执行 nginx -t && nginx -s reload 确认
  • 日志在 /www/server/panel/logs/acme.log,别只看宝塔界面上那个“最后更新时间”,它可能没刷新
  • 如果你改过证书路径(比如把证书移到别的目录),acme.sh 仍往默认路径写,而宝塔还读老路径,就会出现“证书已更新”但网站还是旧证书的情况

多站点共用一个泛域名证书却总失败

宝塔对泛域名(*.example.com)的支持有限,它不直接支持 DNS API 自动续签泛域名,除非你手动干预 acme.sh 的命令逻辑。

  • 泛域名必须用 DNS 验证,HTTP 验证不支持 *;这意味着你得先在宝塔里删掉原有证书,再用 SSH 手动跑带 --dns dns_ali(或其他服务商)的命令
  • 宝塔界面申请时填 *.example.com 会被截断或报错,不要尝试;应该填主域名 example.com,然后在命令行里额外加 -d example.com -d *.example.com
  • 泛域名证书部署后,每个子站点的 SSL 设置里「证书」下拉菜单可能不显示它——这时要手动点击「其他证书」,再从文件路径选 /www/server/panel/vhost/cert/example.com/fullchain.pem 和对应 key
  • 泛域名不能覆盖二级以上子域(比如 a.b.example.com),那是另一个证书的事

自动更新不是设完就高枕无忧的事,最常出问题的其实是证书路径错位、Nginx 重载失败、以及 DNS 验证时 API 权限没给够——这些地方没日志、不报错,但就是不工作。

今天带大家了解了的相关知识,希望对你有所帮助;关于文章的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>