适用环境:Ubuntu 20.04/22.04 + Nginx | 宝塔面板用户看方案一即可 | 数据核实于 2026年9月27日
先说结论
免费 SSL 证书用 Let’s Encrypt 就对了,永久免费、浏览器全信任。真正的问题从来不是”怎么申请”,而是”90 天后的自动续期到底靠不靠谱“——我自己管理的网站就栽在这上面:证书静默过期 4 天才发现。这篇文章除了三种方案的完整命令,还有这次翻车的完整复盘。
先交代一下我为什么写这篇。2026 年 9 月 27 日早上,我像往常一样用脚本更新自己网站(就是你现在看的这个站)的文章,结果 API 请求直接报了证书错误。一查——网站的 Let’s Encrypt 证书 9 月 23 日就过期了,已经裸奔 4 天,期间所有访客打开都是浏览器的”不安全”警告。作为一个天天写 VPS 测评的人,这脸打得相当响。所以这篇教程里的每一个坑,都是我真实踩过的。
免费证书是怎么回事:2026 年你需要知道的几件事
Let’s Encrypt 是非营利组织 ISRG 运营的免费证书机构,签发的是 DV(域名验证)证书——验证你对域名的控制权就发证,加密强度和付费证书完全一样。但 2026 年有几个新变化,直接影响你怎么用:
| 变化 | 内容 | 对你的影响 |
|---|---|---|
| 停发到期提醒邮件 | Let’s Encrypt 从 2025 年起不再发送证书到期提醒邮件 | 别指望邮件救你,自动续期 + 主动监控成了唯一保险 |
| 有效期将缩短到 45 天 | 行业新规:2027 年 2 月起默认 64 天,2028 年 2 月起全部 45 天 | 手动续期一年要操作 8 次,自动化从”建议”变成”必需” |
| 6 天超短证书已可用 | 2026 年 1 月起可申请 6 天有效期的短期证书 | 普通网站用不上,高安全场景的可选项 |
| 速率限制 | 同一主域名每周最多 50 张,相同域名组合每周 5 张重复证书 | 调试时反复申请容易撞限,测试请用 staging 环境 |
四种免费方案对比,先选工具
| 方案 | 适合谁 | 优点 | 缺点 |
|---|---|---|---|
| 宝塔面板一键 | 新手、不想碰命令行 | 点几下鼠标搞定,含续期 | 依赖面板,续期失败不容易第一时间发现 |
| certbot –nginx | Ubuntu/Debian + Nginx 用户 | 官方教程标准答案,自动改配置 | 会在 nginx 配置里写入自己的片段 |
| acme.sh | 想精细控制的进阶用户 | 纯 shell 脚本、模式多、支持泛域名 | 模式选错会埋雷(我的翻车根源) |
| 云厂商免费证书 | 阿里云/腾讯云用户 | 控制台点点点就行 | 现在只发 3 个月且每年限额,一年要手动换 4 次,不建议长期用 |
如果你还没买 VPS 或者正打算换,可以先看看 2026 年外贸用户首选的海外 VPS 推荐指南,证书这步是建站的最后一公里。
方案一:宝塔面板一键申请(新手推荐)
用宝塔的,这条最省事,全程不碰命令行:
第 1 步:宝塔后台 → 网站 → 找到你的站点 → 点「设置」→ 选「SSL」标签页。
第 2 步:选「Let’s Encrypt」→ 勾选你的域名 → 点「申请」。宝塔会自动完成验证和部署,一两分钟就好。
第 3 步:开启右上角的「强制 HTTPS」,这样所有 http 访问会自动跳转到 https。
方案二:certbot –nginx(命令行的标准答案)
没装面板、直接裸机跑 Nginx 的,用 certbot,两条命令搞定申请+部署:
# 安装 certbot 和 nginx 插件(Ubuntu/Debian) sudo apt update sudo apt install -y certbot python3-certbot-nginx # 一条命令申请并自动配置 nginx(把域名换成你自己的) sudo certbot --nginx -d example.com -d www.example.com
certbot 会自动改你的 nginx 配置加 443 监听和证书路径,还会问你要不要强制 HTTPS 跳转,选 Redirect 即可。
装完 certbot 会自动注册一个 systemd 定时器,每天检查两次、到期前 30 天自动续。用这两条命令确认定时器活着、续期链路通:
# 确认定时器存在 systemctl list-timers | grep certbot # 干跑测试:模拟一次续期,不真申请,验证整条链路没问题 sudo certbot renew --dry-run
–dry-run 走的是测试环境,不会消耗正式的签发额度,装完立刻跑一次,能过就说明以后自动续期没问题。
sudo certbot renew --deploy-hook "systemctl reload nginx"
方案三:acme.sh(进阶,但模式一定要选对)
acme.sh 是个纯 shell 脚本实现的 ACME 客户端,我自己的站用的就是它。功能比 certbot 更细,但选错验证模式会埋大雷——我就是这么翻车的。
# 安装 acme.sh curl https://get.acme.sh | sh -s email=你的邮箱 # webroot 模式申请(推荐!域名验证文件放到网站目录里,全程不需要停 nginx) acme.sh --issue -d example.com -d www.example.com -w /var/www/wordpress --keylength ec-256 # 把证书安装到 nginx 用的位置,并设置续期后自动重载 acme.sh --install-cert -d example.com --ecc \ --fullchain-file /etc/nginx/ssl/example.com-fullchain.pem \ --key-file /etc/nginx/ssl/example.com.key \ --reloadcmd "systemctl reload nginx"
-w 后面是你网站的根目录;–keylength ec-256 表示签 ECC 证书,更小更快,新站直接用它。
acme.sh 有两种 HTTP 验证模式,区别巨大:
| 模式 | 原理 | 风险 |
|---|---|---|
| webroot(推荐) | 把验证文件放进网站根目录,nginx 不用停 | 几乎无风险,续期对网站零影响 |
| standalone | 申请时临时起一个服务独占 80 端口 | 如果你的 nginx 一直占着 80 端口,每次续期都会失败 |
用 webroot 模式还要注意一个细节:如果你的 nginx 把 80 端口的所有请求都 301 跳转到 https,需要给验证路径开个白名单,否则验证文件会被跳走:
server {
listen 80;
server_name example.com www.example.com;
# 给 Let's Encrypt 验证路径开白名单
location ^~ /.well-known/acme-challenge/ {
root /var/www/wordpress;
}
# 其余请求正常跳转 https
location / {
return 301 https://example.com$request_uri;
}
}
这段是我这次修证书时实际用上的配置,加在 80 端口的 server 块里。
我的翻车实录:证书静默过期 4 天的完整复盘
如果你只想记住一件事,就是这一节。下面是我自己网站这次事故的完整时间线,每个环节都真实发生过:
| 时间 | 发生了什么 |
|---|---|
| 2026 年 4 月 | 网站上线,用 acme.sh 给主域和 api 子域签了 ECC 证书,装了每天凌晨 1:10 的自动续期定时任务,当时一切正常 |
| 4 月 ~ 9 月 | 定时任务每天执行、每天失败——因为 acme.sh 当初装的是 standalone 模式,要独占 80 端口,而 nginx 一直占着 80。错误输出被 cron 里的 > /dev/null 吞掉了,没有任何报警 |
| 9 月 23 日 | 证书悄悄过期。没有邮件提醒(Let’s Encrypt 2025 年起停发了),没有监控,什么都没有 |
| 9 月 27 日 | 我用脚本更新文章时 API 报 SSL 证书错误才发现,此时已过期 4 天。而另一台由 certbot 管的证书自动续期一直正常——两套证书体系并行,反而给了我虚假的安全感 |
| 当天上午 | 排查根因 → 切换 webroot 模式 → 给 80 端口加验证路径白名单 → 强制续期 → 部署到期监控,全部修复 |
复盘下来,这次翻车是四个错误叠加的结果,每一条都值得你对照自查:
教训一:定时任务存在 ≠ 续期会成功。我的 cron 任务每天 01:10 都在跑,但它跑了五个多月、失败了五个多月。装完自动续期后必须立刻用 --dry-run(certbot)或 --renew --force(acme.sh)验证一次完整链路。
教训二:cron 里的 > /dev/null 是吞错误的黑洞。我当时为了日志干净把输出全丢了。至少要保留错误输出并重定向到一个会去看的日志文件,更好的做法是加监控(我就是这次翻车后立刻给网站加了每天自动检查证书和 HTTP 状态的定时任务)。
教训三:多套证书体系并行会制造虚假安全感。我服务器上 certbot 和 acme.sh 并存,看到 certbot 那张证书一直好好的,就默认”证书系统没问题”。每张证书要单独验证,别用 A 的正常推断 B 的状态。
教训四:Let’s Encrypt 不会再发提醒邮件了。以前证书快过期还能等邮件救,2025 年起这条路没了。自动续期 + 主动监控 + 定期看一眼,三层保险至少要占两层。
续期避坑清单(不管你用哪种方案)
| 坑 | 症状 | 解法 |
|---|---|---|
| 80 端口被占用 | standalone 模式续期永远失败 | 改用 webroot 或 –nginx 模式,别和 nginx 抢端口 |
| 全部 301 跳转 https | webroot 验证文件被跳走,验证失败 | 80 端口 server 块给 /.well-known/acme-challenge/ 开白名单 |
| 证书更新了网站没更新 | 文件是新的,浏览器还是旧证书 | 续期钩子里加 systemctl reload nginx |
| 续期任务被误删/停用 | 什么报错都没有,到期直接失效 | 定期跑 certbot renew --dry-run 或看 systemctl list-timers |
| DNS 没指向本机 | 验证失败:不是本机控制的域名 | 先 ping 域名 确认解析到了当前服务器 IP |
| 调试时反复申请 | 撞上每周 5 张重复证书的限制 | 调试用 staging 测试环境,正式签发只在最后做 |
怎么自己检查证书状态
最后给你三条我在这次事故后天天在用的检查命令,建议收藏:
# 1. 看当前证书的到期时间(在你的电脑上就能跑,不用登录服务器) echo | openssl s_client -servername 你的域名 -connect 你的域名:443 2>/dev/null | openssl x509 -noout -dates # 2. certbot 用户:模拟续期验证链路(不消耗额度) sudo certbot renew --dry-run # 3. acme.sh 用户:查看所有证书和续期计划 acme.sh --list
命令 1 的输出里 notAfter 就是到期时间。更省事的办法是把这个检查做成每天跑的定时任务,剩余天数少于 7 天就报警——我就是这么干的。
想给证书做个全面体检的话,把域名丢到 SSL Labs 的免费检测里跑一遍,能拿到 A-F 评级和详细的配置问题清单。
常见问题
1. 免费证书和付费证书加密强度有区别吗?
没有。DV 证书的加密算法、密钥长度和付费证书完全一样,浏览器地址栏的锁标志也一样。付费证书多的是 OV(验证企业身份)和 EV(浏览器显示公司名),以及客服、保险这些商业服务。个人博客、外贸展示站用免费 DV 证书完全够用,这也是全网 70% 以上网站的选择。
2. 90 天太短了,有没有有效期更长的免费证书?
ZeroSSL 免费账户能给 90 天的证书,云厂商的免费 DV 证书 2024 年后也缩到了 3 个月,其实都一样短。这是行业趋势——CA/B 论坛已强制要求 2028 年前所有证书缩到 45 天。方向很明确:别找长效证书了,把自动续期做扎实才是正解。
3. 通配符证书(*.example.com)能免费申请吗?
能。Let’s Encrypt 支持免费的通配符证书,但必须用 DNS-01 验证(往域名加一条 TXT 记录来证明控制权)。acme.sh 支持各家 DNS 服务商的 API 自动完成,certbot 需要装对应 DNS 插件。宝塔面板也支持。单个子域验证(HTTP-01)满足需求的话,就没必要折腾通配符。
4. 证书快过期了会有提醒吗?
Let’s Encrypt 从 2025 年起已停止发送到期提醒邮件。你现在能依赖的只有三样:自动续期、自己的监控、以及续期失败的日志。我这次就是三样都缺,才裸奔了 4 天。最少做到:装完续期后跑一次 dry-run 验证,然后每个月登录服务器跑一次 certbot renew --dry-run 或 acme.sh --list 看一眼。
5. 换了 VPS 服务器,证书要重新申请吗?
要。证书是跟私钥绑定的,最稳妥的做法是新机器上重新走一遍申请流程(反正免费,几十秒的事),别把证书文件拷来拷去。新机器申请前记得先把域名 DNS 切到新 IP 并等生效,否则 HTTP 验证会失败。换机器也正好把安全底子重打一遍,可以按这篇 VPS 到手后的 5 个安全配置 逐项过。
写在最后
免费 SSL 证书这件事,申请只占 10%,剩下 90% 的功夫都在”确保它一直有效”。2027、2028 年证书有效期还会进一步缩短,续期频率只会更高,自动化加监控的组合是唯一的出路。希望我的这次翻车能帮你少踩一个坑——毕竟浏览器那个”不安全”警告,挂一天都嫌多。顺带一提,虚拟主机一般由服务商代管证书,但自由度也小很多,还在纠结的话看这篇 VPS 和虚拟主机的区别。
证书搞定之后,别忘了把服务器的其他安全项也过一遍,比如这篇 VPS 安全配置清单;如果是刚起步的外贸独立站,从选 VPS 到建站的完整路径可以看 外贸 SOHO 用 VPS 搭建独立站指南,预算敏感的话 RackNerd 年付 30 美元以内的入门套餐跑个人站绰绰有余。

Pingback: VPS IP 被墙了怎么办?检测、换IP、预防一篇讲透(2026) - VPS排行 | 2026外贸VPS推荐 | 国外虚拟主机
Pingback: Cloudflare 免费套餐全指南(2026):CDN 加速+DDoS 防护+隐藏源站 IP 实操 - VPS排行 | 2026外贸VPS推荐 | 国外虚拟主机