免费 SSL 证书申请与部署教程(2026):Let’s Encrypt 三种方案与我的续期翻车实录

适用环境: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 环境
⚠️ 最重要的一条:90 天有效期是故意设计短的——官方的立场就是”你必须自动化续期”。我这次过期,根子就是把”装了定时任务”当成了”续期一定能成功”,这两者之间差得远,后面细说。

四种免费方案对比,先选工具

方案 适合谁 优点 缺点
宝塔面板一键 新手、不想碰命令行 点几下鼠标搞定,含续期 依赖面板,续期失败不容易第一时间发现
certbot –nginx Ubuntu/Debian + Nginx 用户 官方教程标准答案,自动改配置 会在 nginx 配置里写入自己的片段
acme.sh 想精细控制的进阶用户 纯 shell 脚本、模式多、支持泛域名 模式选错会埋雷(我的翻车根源)
云厂商免费证书 阿里云/腾讯云用户 控制台点点点就行 现在只发 3 个月且每年限额,一年要手动换 4 次,不建议长期用

如果你还没买 VPS 或者正打算换,可以先看看 2026 年外贸用户首选的海外 VPS 推荐指南,证书这步是建站的最后一公里。

方案一:宝塔面板一键申请(新手推荐)

用宝塔的,这条最省事,全程不碰命令行:

第 1 步:宝塔后台 → 网站 → 找到你的站点 → 点「设置」→ 选「SSL」标签页。

第 2 步:选「Let’s Encrypt」→ 勾选你的域名 → 点「申请」。宝塔会自动完成验证和部署,一两分钟就好。

第 3 步:开启右上角的「强制 HTTPS」,这样所有 http 访问会自动跳转到 https。

⚠️ 宝塔用户的坑:宝塔的自动续期任务依赖面板的定时任务服务正常运行。如果你升级过面板、或者动过计划任务,去「计划任务」列表里确认「续签 Let’s Encrypt 证书」这个任务还在并且最近一次执行成功。我的经验是:宝塔的 SSL 页面会显示证书剩余天数,每次登录面板时顺手瞄一眼,比什么都强。

方案二: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 走的是测试环境,不会消耗正式的签发额度,装完立刻跑一次,能过就说明以后自动续期没问题。

推荐加一个部署钩子,让每次续期成功后自动重载 nginx,避免”证书文件更新了但网站还在用旧证书”的尴尬: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 美元以内的入门套餐跑个人站绰绰有余。

2人评论了“免费 SSL 证书申请与部署教程(2026):Let’s Encrypt 三种方案与我的续期翻车实录”

  1. Pingback: VPS IP 被墙了怎么办?检测、换IP、预防一篇讲透(2026) - VPS排行 | 2026外贸VPS推荐 | 国外虚拟主机

  2. Pingback: Cloudflare 免费套餐全指南(2026):CDN 加速+DDoS 防护+隐藏源站 IP 实操 - VPS排行 | 2026外贸VPS推荐 | 国外虚拟主机

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部