Let’s Encrypt 证书申请失败90%因端口或解析问题:域名须解析至服务器IP,80/443端口须对外开放;CDN用户需改用DNS验证;阿里云DNS验证需RAM子账号具备AliyunDNSFullAccess权限且勾选“编程访问”;证书成功后需手动开启强制HTTPS并重启Nginx;续签需在到期前30天内操作,注意域名解析、系统时间及磁盘空间。

Let’s Encrypt 证书申请失败,90% 是端口或解析问题
宝塔里点一下「申请」就完事?不是。失败时面板常只显示“验证失败”或卡在“正在验证”,根本没告诉你哪一步断了。
核心就两个检查点:域名必须已正确解析到当前服务器 IP;80 和 443 端口必须对外可访问(不只是服务器内部开放)。
- 阿里云/腾讯云用户:务必去「安全组」放行
80和443端口,控制台里的防火墙设置和云厂商安全组是两层,缺一不可 - 用了 CDN(如 Cloudflare)或反向代理:
80端口通常被 CDN 接管,此时文件验证(HTTP-01)必然失败,必须切到 DNS 验证 - 本地 hosts 修改过、或 DNS 缓存未刷新:用
dig +short yourdomain.com或nslookup yourdomain.com确认返回的 IP 确实是你的服务器公网 IP
DNS 验证选阿里云,AccessKey 权限不能省
选 DNS 验证后填 AccessKey,不是贴上 ID 和 Secret 就能过。RAM 子账号权限不对,宝塔调用阿里云 API 会静默失败,连错误提示都不给。
关键动作只有三步,但漏任何一步都会卡住:
- 创建 RAM 用户时,必须勾选「编程访问」——不勾这个,
AccessKey Secret根本不会生成 - 授权策略必须是
AliyunDNSFullAccess,别手滑选成AliyunDNSReadOnlyAccess或其他带「Read」字样的策略 - 填进宝塔的
AccessKey ID和AccessKey Secret必须完全复制,不能多空格、不能换行、不能用中文引号包裹
如果刚授完权就申请,等 1–2 分钟再试,权限同步有延迟,不是立刻生效。
证书申请成功 ≠ HTTPS 自动生效
面板显示「申请成功」,浏览器输 https:// 还是打不开?大概率是没开强制跳转,或者 Nginx 配置没重载。
- 宝塔里 SSL 页面右上角有「强制 HTTPS」按钮,点它——这步会自动改 Nginx 配置加 301 跳转,比手动写 rewrite 安全得多
- 如果网站用了反向代理(比如前端套了 Nginx 做负载),强制跳转可能失效,得去「配置文件」里确认
return 301 https://$host$request_uri;是否真写进去了 - 证书部署后,记得点「重启」Nginx(不是「重载」),尤其改过配置或之前 Nginx 挂过,重载不一定加载新证书
续签不是全自动,得盯住 90 天周期
Let’s Encrypt 证书有效期固定 90 天,宝塔不会提前发邮件、也不会弹窗提醒。到期前 30 天内,你得自己进 SSL 页面点「续签」。
续签失败常见原因很具体:
- 域名解析中途改过,或某条子域名(比如
api.yourdomain.com)已不再指向该服务器,申请时又勾选了它 → 续签直接报错 - 服务器时间不准,偏差超过 5 分钟,Let’s Encrypt 会拒绝签发 → 运行
timedatectl status看是否同步,必要时执行ntpdate -u ntp.aliyun.com - 磁盘空间不足,/www/server/panel/vhost/ssl/ 下写不了新证书 →
df -h看根分区或 /www 分区剩余空间
真正容易被忽略的是:泛域名(*.example.com)必须用 DNS 验证,且只能通过阿里云、Cloudflare 等支持 API 的 DNS 提供商完成,文件验证完全不支持。










