PAIBAOWORK · B2B DIGITAL GROWTHB2B 建站 · WhatsApp 客户沟通 · AI CRM
泓森互联 · 建站大专题 · SSL 证书分册最后核实 2026-10-12 · v1.0

路线教程 · A

路线 A:Linux 云服务器 + Certbot 完整教程

适合能用 SSH 登录 Linux 服务器(有 sudo 权限)、网站跑在 Nginx 或 Apache 上的企业网站。第一次做约 20~30 分钟,熟练后 15 分钟;证书免费、自动续期。文中官方资料均于 2026-10-10 核对。

本文目录 · 19 节
  1. 一张表看懂
  2. 什么时候选这条路,什么时候别选
  3. 动手前的 4 项前置条件
  4. 步骤总览
  5. 第 0 步:登录服务器
  6. 第 1 步:备份配置,确认网站能用 http 打开
  7. 第 2 步:安装 Certbot
  8. 第 3 步:一条命令申请并安装证书(Nginx)
  9. 第 4 步:Apache 用户
  10. 第 5 步:插件识别不了网站时(webroot 方式)
  11. 第 6 步:验证与验收
  12. 第 7 步:确认自动续期(这一步不能省)
  13. 申请失败的 5 分钟自查流程
  14. 失败排查表
  15. 常见坑(踩过一次就记住)
  16. 多域名、通配符与「换服务器」
  17. 把这件事交给 AI 智能体
  18. 装好之后还要做的两件事
  19. 出事了怎么回滚

先说结论

  • 核心就两条命令:安装 Certbot(snap 或 apt/dnf),然后 sudo certbot --nginx -d 你的域名 -d www.你的域名,看到 Congratulations! You have successfully enabled HTTPS 即成功。
  • 80 端口必须对外可达(云安全组 + 系统防火墙两道门都要放行),这是验证失败的第一大原因;多余的 AAAA(IPv6)记录指向旧服务器是隐形杀手。
  • 装完必须确认自动续期:sudo certbot renew --dry-run 显示所有模拟续期成功,且 systemctl list-timers | grep -i certbot 能看到定时器。
  • 改配置前先备份(sudo cp -a /etc/nginx /root/nginx-backup-$(date +%F)),重载前先测试(sudo nginx -t),出事 5 分钟能回滚。

🤖 把这篇交给你的 AI 智能体

复制后粘贴给你常用的 AI 智能体(豆包、ChatGPT、Claude、Codex 等),它会按同样的步骤带你做完,并在每一步改动前先征求你的同意。不要把密码、密钥发到对话里。

⬇ 下载 SKILL.md 📄 Markdown 版 提示词语言:
查看将要复制的提示词
提示词版本 v1.0 · 最后核实 2026-10-12
✅ 已复制!去粘贴给你的智能体吧

一张表看懂

项目内容
适合谁你或技术人员能用 SSH 登录自己的 Linux 云服务器(有 sudo 权限),网站跑在 Nginx 或 Apache 上【判断】
用时第一次做 20~30 分钟(含验证),熟练后 15 分钟【估算】
难度★★★(六条路线里最需要敲命令的一条)
花钱0 元:证书由 Let's Encrypt 免费签发,Certbot 自动续期
前置条件域名已解析到这台服务器;安全组和系统防火墙都放行 80、443;配置里的 server_name 写对域名
成功标志浏览器显示「连接是安全的」;sudo certbot renew --dry-run 显示所有模拟续期成功

Certbot 是 EFF(电子前哨基金会,美国非营利组织)开发的免费工具:自动申请 Let's Encrypt 证书、自动改好 Nginx/Apache 配置、自动建好续期定时任务。官方安装向导在 https://certbot.eff.org/instructions,本文按它的推荐流程写,并补上「失败怎么看、怎么修」。

Certbot 官方安装向导(选择 Nginx + Linux (snap))
真实截图Certbot 官方安装向导(选择 Nginx + Linux (snap))

什么时候选这条路,什么时候别选

选它,如果你:

  • 网站放在自己的云服务器上(阿里云 ECS、腾讯云 CVM、AWS、Vultr、搬瓦工……),你能用 SSH 登录;
  • 网站由 Nginx 或 Apache 提供(curl -sI https://你的域名 的 server: 头显示 nginx 或 Apache);
  • 你或你的技术同事愿意敲几条命令。

别选它,如果你:

  • 服务器上装了宝塔面板——用面板点鼠标更快,见路线 B:宝塔面板;
  • 只有虚拟主机后台(cPanel)——见〔路线 C:cPanel〕;
  • 根本没有服务器权限、只能管域名——见〔路线 D:Cloudflare〕;
  • 网站建在 Shopify / Wix / WordPress.com——平台会自动签发,见〔路线 E:SaaS 平台〕。

不确定自己是哪条路线?先读〔部署前预检清单〕和《网站 SSL 证书免费部署完全指南》第 0.3 节的 6 道题流程图:

6 道题找到你的路线
示意图6 道题找到你的路线

动手前的 4 项前置条件

这四项是「只看不改」的检查,先确认再动手,能挡掉后面 80% 的失败。

#检查项怎么查合格标准
1域名解析到本机nslookup 你的域名,或在浏览器打开 dns.google 查 type=A显示的 IP 就是这台服务器的公网 IP
280 和 443 端口外网可达用手机流量打开 http://你的域名能打开网页(哪怕是默认页、403 页)
3有 sudo 权限、能改配置sudo -v,再 ls /etc/nginx/(或 /etc/apache2/)不报权限错误
4配置里的域名写对grep -R "server_name" /etc/nginx/包含你要申请的域名,如 server_name 你的域名 www.你的域名;
在浏览器里用 dns.google 查询域名解析(返回的就是 IP 地址)
真实截图在浏览器里用 dns.google 查询域名解析(返回的就是 IP 地址)

放行 80 / 443:两道门都要开

云服务器的端口有两道门:云控制台里的安全组(像小区大门)和服务器系统里的防火墙(像家门)。两道都要放行 TCP 80 和 443。

云安全组添加 80/443 入方向规则(以阿里云 ECS 为例,菜单名称以实际控制台为准)
示意图云安全组添加 80/443 入方向规则(以阿里云 ECS 为例,菜单名称以实际控制台为准)
sudo ufw status
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

逐行解释:第 1 行查看 ufw 防火墙状态,如果显示 Status: inactive(未启用),说明这道门本来就开着,后两行可以不做;第 2、3 行分别放行 80 和 443。CentOS / Rocky / AlmaLinux 用 firewalld:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

--permanent 表示重启后依然有效,--reload 让设置马上生效,看到 success 即可。

步骤总览

步骤做什么关键命令 / 位置成功标志
0登录服务器ssh root@服务器IP出现 root@server:~# 提示符
1备份配置 + 确认 http 可用sudo cp -a /etc/nginx /root/nginx-backup-$(date +%F);sudo nginx -tsyntax is ok、test is successful
2安装 Certbotsudo snap install --classic certbot(或 apt/dnf)certbot --version 能输出版本号
3申请并安装证书sudo certbot --nginx -d 域名 -d www.域名Congratulations! You have successfully enabled HTTPS
4确认自动续期sudo certbot renew --dry-run;`systemctl list-timers \grep -i certbot`全部模拟续期成功 + 能看到定时器
5浏览器与工具验收访问网站、SSL Labs显示「连接是安全的」,评级 A/A+

第 0 步:登录服务器

  1. 1. Windows 用户:打开「Windows 终端」或「PowerShell」(Windows 10/11 自带 ssh 命令);Mac 用户:打开「终端」。也可以用云厂商网页控制台里的「远程连接 / Workbench / VNC」。
  2. 2. 输入(把 IP 换成你的服务器 IP,把 root 换成你的用户名):
ssh root@47.xx.xx.xx
  1. 3. 第一次连接会问 Are you sure you want to continue connecting (yes/no)?,输入 yes 回车。
  2. 4. 输入密码(输入时屏幕不会显示任何字符,这是正常的),回车。
  3. 5. 看到类似 root@server:~# 或 ubuntu@server:~$ 的提示符,说明登录成功。

第 1 步:备份配置,确认网站能用 http 打开

改任何东西之前,先把配置目录复制一份。

sudo cp -a /etc/nginx /root/nginx-backup-$(date +%F)
sudo nginx -t
curl -sI http://你的域名 | head -1

逐行解释:

  1. 1. 把整个 Nginx 配置目录复制一份到 /root/,文件夹名带今天的日期(出问题时可以原样恢复)。Apache 换成 sudo cp -a /etc/apache2 /root/apache2-backup-$(date +%F)(CentOS 是 /etc/httpd)。
  2. 2. 检查当前配置语法。应看到 syntax is ok 和 test is successful。
  3. 3. 确认网站 http 能访问,应看到 HTTP/1.1 200 OK(或 301/403)。
nginx -t 检查通过
真实命令输出nginx -t 检查通过

第 2 步:安装 Certbot

方法一(官方推荐):snap 安装

sudo apt-get remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/local/bin/certbot

逐行解释:

  1. 1. 先删掉系统里可能存在的旧版 certbot(没有装过会提示「未安装」,没关系)。
  2. 2. 用 snap(Ubuntu 自带的软件商店)安装最新版 Certbot。--classic 是官方要求的参数。
  3. 3. 建一个「快捷方式」,让你在任何地方都能直接输入 certbot。如果提示 File exists,说明已经有了,忽略即可。

方法二:用系统软件源(apt / dnf)安装

sudo apt update
sudo apt install certbot python3-certbot-nginx

Apache 用户把第二行换成 sudo apt install certbot python3-certbot-apache。系统源的版本可能比 snap 旧一些,但同样能用、同样自带自动续期(实验环境里装的是 Certbot 4.0.0)。

CentOS / RHEL / Rocky / AlmaLinux

sudo dnf install epel-release
sudo dnf install certbot python3-certbot-nginx

逐行解释:第 1 行启用 EPEL(Fedora 社区维护的扩展软件源,certbot 在这里面);第 2 行安装 Certbot 和 Nginx 插件。Apache(在这些系统里叫 httpd)用户安装 python3-certbot-apache mod_ssl。老的 CentOS 7 用 yum 代替 dnf(CentOS 7 已停止维护,建议尽早升级系统)。

装完检查一下:certbot --version 应输出版本号。

第 3 步:一条命令申请并安装证书(Nginx)

sudo certbot --nginx -d 你的域名 -d www.你的域名

逐段解释:--nginx 表示「用 Nginx 插件:自动验证 + 自动改配置」;每个 -d 后面跟一个域名,根域名和 www 都要写(把域名换成你自己的)。

第一次运行会问你几个问题:

  1. 1. Enter email address:填一个常用邮箱(用于重要通知;Let's Encrypt 已不再发到期提醒邮件)。
  2. 2. Please read the Terms of Service ... (Y)es/(N)o:输入 Y 同意服务条款。
  3. 3. Would you be willing ... to share your email address with the EFF:是否订阅 EFF 新闻,Y 或 N 都可以。
  4. 4. 等待十几秒,看到下面这样的输出就成功了:
certbot --nginx 成功申请并部署证书
真实命令输出certbot --nginx 成功申请并部署证书

你应该看到的关键字(这就是成功标志):

  • Successfully received certificate.:证书拿到了;
  • This certificate expires on ...:到期日(约 90 天后);
  • Certbot has set up a scheduled task to automatically renew:自动续期已安排;
  • Congratulations! You have successfully enabled HTTPS:已经部署到 Nginx。

Certbot 自动改了你的 Nginx 配置:加了 443 端口和证书路径,并把 80 端口的访问 301 跳转到 https。带 # managed by Certbot 的行就是它加的:

Certbot 修改后的 Nginx 配置文件
真实命令输出Certbot 修改后的 Nginx 配置文件

第 4 步:Apache 用户

sudo certbot --apache -d 你的域名 -d www.你的域名

和 Nginx 完全一样,只是把 --nginx 换成 --apache。Certbot 会新建一个 -le-ssl.conf 结尾的配置文件,并加好跳转。完成后检查:

sudo apachectl configtest

应看到 Syntax OK。CentOS 上如果报 mod_ssl 相关错误,先 sudo dnf install mod_ssl 再重试。

第 5 步:插件识别不了网站时(webroot 方式)

如果你的网站是 Docker、Node.js 等特殊架构,Certbot 插件识别不了,可以用 webroot(网站根目录)方式:

sudo certbot certonly --webroot -w /var/www/html -d 你的域名 -d www.你的域名

-w 后面填网站文件所在目录。Certbot 会在其中的 .well-known/acme-challenge/ 放一个临时文件,Let's Encrypt 通过 http://你的域名/.well-known/acme-challenge/... 读取它来确认你控制该域名。拿到证书后需要手动配置到网页软件里。

Let's Encrypt 官方文档「验证方式(Challenge Types)」页面,介绍 HTTP-01 与 DNS-01
真实截图Let's Encrypt 官方文档「验证方式(Challenge Types)」页面,介绍 HTTP-01 与 DNS-01

第 6 步:验证与验收

三件事都要做:命令验证、浏览器验证、在线检测。

curl -I http://你的域名
curl -vI https://你的域名 2>&1 | grep -E "subject|date|issuer|verify|HTTP/"

第 1 行应返回 301 Moved Permanently(http 自动跳 https);第 2 行应看到 SSL certificate verify ok 和正确的到期日。

HTTP 自动 301 跳转到 HTTPS
真实命令输出HTTP 自动 301 跳转到 HTTPS
curl 查看证书:subject(颁发给谁)、start/expire date(起止日期)、issuer(谁颁发的)、verify ok(校验通过)
真实命令输出curl 查看证书:subject(颁发给谁)、start/expire date(起止日期)、issuer(谁颁发的)、verify ok(校验通过)
echo | openssl s_client -connect 你的域名:443 -servername 你的域名 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

openssl s_client 像浏览器一样连接网站的 443 端口并取回证书;-servername 告诉服务器你要的是哪个域名(一台服务器常有多个网站);第二个 openssl x509 把证书内容翻译成人能看懂的字;notAfter 就是到期时间(GMT 时间,北京时间要加 8 小时)。

openssl 查看到期日;下方是访问过期证书网站时 curl 的报错
真实命令输出openssl 查看到期日;下方是访问过期证书网站时 curl 的报错

浏览器里:点地址栏左侧图标 → 应显示「连接是安全的」→ 再点「证书有效」,能看到颁发对象(你的域名)、颁发者、有效期。

点击地址栏左侧图标后弹出的窗口
真实截图点击地址栏左侧图标后弹出的窗口
点「连接是安全的」后看到「证书有效」
真实截图点「连接是安全的」后看到「证书有效」

最后在 https://www.ssllabs.com/ssltest/ 输入域名跑一次,目标 A 或 A+。

SSL Labs 检测首页
真实截图SSL Labs 检测首页
SSL Labs 检测结果示例(letsencrypt.org 获得 A+)
真实截图SSL Labs 检测结果示例(letsencrypt.org 获得 A+)

第 7 步:确认自动续期(这一步不能省)

Let's Encrypt 证书现在 90 天有效,官方计划 2027-02-10 起默认 64 天、2028-02-16 起 45 天;并且 Let's Encrypt 已于 2025-06-04 停止发送到期提醒邮件。所以「自动续期有没有真的开好」必须自己确认。

sudo certbot renew --dry-run
sudo certbot certificates

第 1 行「演练续期」:不会真正替换证书,只检查续期流程能不能走通。看到 Congratulations, all simulated renewals succeeded 即正常。第 2 行列出本机所有证书和剩余天数。

certbot renew --dry-run 演练续期成功
真实命令输出certbot renew --dry-run 演练续期成功
certbot certificates 查看证书和剩余天数
真实命令输出certbot certificates 查看证书和剩余天数

Certbot 安装时会自动建好定时任务(每天两次检查,到期前约 30 天自动续期)。确认方法:

systemctl list-timers | grep -i certbot

snap 安装的名字是 snap.certbot.renew.timer,apt 安装的是 certbot.timer(没有 systemd 的系统则是 /etc/cron.d/certbot 定时任务)。

apt 版 Certbot 自带的续期定时器和 cron 文件内容
真实命令输出apt 版 Certbot 自带的续期定时器和 cron 文件内容
systemctl list-timers 的正常输出(终端样式模拟)
示意图systemctl list-timers 的正常输出(终端样式模拟)

申请失败的 5 分钟自查流程

按这个顺序查,基本都能定位:

  1. 1. 看输出里的关键词:Timeout 是端口问题,connection refused 是网页软件没跑,NXDOMAIN 是解析问题,unauthorized/404 是「访问到的不是这台服务器」。
  2. 2. 确认 80 端口对外可达:用手机流量(不连公司 WiFi)打开 http://你的域名。打不开就是安全组或系统防火墙没放行。
  3. 3. 确认域名指向本机:nslookup 你的域名,并把结果和云控制台里的公网 IP 对一遍;再看有没有多余的 AAAA 记录。
  4. 4. 确认网页软件在运行:sudo systemctl status nginx(或 apache2 / httpd),状态应是 active (running)。
  5. 5. 确认 server_name 写对:grep -R "server_name" /etc/nginx/,必须包含你要申请的域名。
  6. 6. 临时关掉干扰项:如果站点开了 CDN、反向代理或 301 跳转,先关掉再申请,装好后再打开。
  7. 7. 用 --dry-run 演练,避免把失败次数用光:sudo certbot --nginx --dry-run -d 你的域名 -d www.你的域名。

失败排查表

申请或续期失败时,输出里的关键词就是线索。下表前 5 行是「验证失败长什么样」的原文对照,后面几行是常见故障。

验证失败:Let's Encrypt 无法访问 80 端口
真实命令输出验证失败:Let's Encrypt 无法访问 80 端口
输出里的关键词意思怎么办
Type: connection + Timeout80 端口被安全组或防火墙挡住两道门都放行 80(见上文「放行 80/443」);用手机流量访问 http://域名 测试
Type: connection + connection refused服务器没有程序在 80 端口上运行启动网页软件:sudo systemctl start nginx(或 apache2 / httpd)
Type: dns + NXDOMAIN域名没有解析或 DNS 尚未生效用 dns.google 查 A 记录,确认生效后再申请
Type: unauthorized + 404访问到的不是这台服务器;或有重写/跳转规则拦住了验证文件删除指向旧服务器的 AAAA 记录;临时关掉 301/CDN;检查网站根目录
too many failed authorizations失败次数太多被暂时限制(同一域名每小时 5 次)等一小时,先排查再用 --dry-run 测试
CAA record 不允许CAA 记录未包含 letsencrypt.org在 DNS 里添加 0 issue "letsencrypt.org",或删掉旧的 CAA 记录
too many certificates触发了签发频率限制(同一组域名 7 天内最多 5 次)等待并排查;用 --dry-run 演练、--test-cert 用测试服务器,别反复狂试
浏览器 ERR_TOO_MANY_REDIRECTS多处重复跳转(例如又开了 CDN 的强制 https)只保留一处跳转
NET::ERR_CERT_COMMON_NAME_INVALID证书没包含当前访问的域名(如少了 www)重新申请时把根域名和 www 都写上
NET::ERR_CERT_DATE_INVALID证书已过期立即 sudo certbot renew,然后查自动续期为什么失效
手机打不开、电脑正常证书链不完整(只装了域名证书,没装中间证书)Nginx 用 fullchain.pem;SSL Labs 看 Chain issues
证书到期没自动续定时任务没运行;续期时 80 端口被关;后来开了 CDN/301;改过网页配置sudo certbot renew --dry-run 看报错,按上面几行排查
改完 Nginx 配置后网站全挂配置语法错误sudo nginx -t 看错误行;用备份恢复:sudo cp -a /root/nginx-backup-日期/. /etc/nginx/ 后 sudo systemctl reload nginx
中国大陆服务器,验证一直失败或访问显示备案提示域名未备案,访问被云厂商阻断完成备案,或把网站迁到境外服务器;证书解决不了备案问题

常见坑(踩过一次就记住)

  1. 1. 只写了根域名,没写 www。 结果访问 https://www.你的域名 报「名称不符」。申请时 -d 根域名 -d www.域名 两个都要写。
  2. 2. 有一条指向旧服务器的 AAAA(IPv6)记录。 这是验证失败的隐形杀手:Let's Encrypt 可能走 IPv6 去验证,结果连到一台已经不用了的机器。用 dns.google 查 type=AAAA 确认。
  3. 3. 装完就以为完事了。 强制跳转、混合内容、自动续期、到期监控这四件事一件都不能少(见下节)。
  4. 4. 混合内容(Mixed Content):页面本身是 https,但里面的图片、脚本还是 http:// 地址,浏览器仍会提示「不安全」。按 F12 打开控制台搜 Mixed Content 逐个改成 https。
  5. 5. HSTS 先别急着开。 HSTS 会让浏览器在一段时间内「只认 https」,一旦证书出问题,访客连「继续访问」按钮都没有。建议全站 https 稳定运行几周后再考虑,并从较短有效期开始。
  6. 6. Cloudflare 源证书不能直接给访客用。 它只在「Cloudflare ↔ 你的服务器」这一段有效,浏览器不信任;直接访问会报 NET::ERR_CERT_AUTHORITY_INVALID。
  7. 7. 私钥和令牌不要外发。 需要输入密钥时在自己终端里输入(例如 read -s),不要贴在聊天里;用过的一次性令牌事后撤销。

多域名、通配符与「换服务器」

一张证书能放几个域名

Certbot 写多个 -d 参数即可,例如 -d 你的域名 -d www.你的域名 -d shop.你的域名。Let's Encrypt 一张证书最多包含 100 个域名。不同根域名也可以放在同一张证书里,但一般建议每个网站各用一张,互不影响。

什么时候才需要通配符证书

*.你的域名 覆盖所有一级子域名(www.、shop.、m.),但不覆盖 你的域名 本身,也不覆盖 a.b.你的域名。免费证书支持通配符,但只能用 DNS 验证:

sudo certbot certonly --manual --preferred-challenges dns \
  -d 你的域名 -d '*.你的域名'

这条命令会提示你在 DNS 里添加一条 _acme-challenge 的 TXT 记录,验证通过后才签发。注意:--manual 方式默认不会自动续期,每 90 天都要人工再来一次——除非你把 DNS 服务商的 API 令牌接进来做自动验证。子域名不多时,直接把每个子域名写进同一张证书更简单,也更省心。

换服务器、换建站公司怎么办

在新服务器上重新申请即可:免费、几分钟,不需要「迁移证书」。正确顺序是:先在新服务器上把网站准备好(域名仍指向老服务器)→ 修改 DNS 指向新服务器 → DNS 生效后立即申请证书,这样不会出现证书错误的窗口期。原服务器上的证书留在原地即可,不做任何处理。

把这件事交给 AI 智能体

如果你不想自己敲命令,可以把本页的「一键复制给智能体」提示词复制给常用的 AI 智能体(豆包、ChatGPT、Claude、Codex 等),它会按同样的顺序先问你问题、做只读预检、再一步一步带你执行,每一步改动前先征求你的同意。

装好之后还要做的两件事

① 确认强制跳转已生效。 --nginx / --apache 默认已自动添加 301。只有在你手动配置、没有用 Certbot 时,才需要自己在 Nginx 里写:

server {
    listen 80;
    server_name 你的域名 www.你的域名;
    return 301 https://$host$request_uri;
}

逐行解释:监听 80 端口(http);匹配你的域名;把请求以 301 永久跳转到同一地址的 https 版本($host 是访客访问的域名,$request_uri 是后面的路径和参数)。改完记得 sudo nginx -t 再 sudo systemctl reload nginx。

② 设置证书到期监控。 Let's Encrypt 已不再发提醒邮件,自己设一个「闹钟」:用免费监控服务(到期前发邮件),或在手机日历里按到期日提前 20 天设提醒,内容写「检查网站证书是否已自动续期」。

出事了怎么回滚

万一改完配置网站打不开,按这个顺序恢复,5 分钟内能回到动手前的状态:

  1. 1. 先看错误行:sudo nginx -t(Apache 用 sudo apachectl configtest)会指出是哪一行语法错误。
  2. 2. 恢复备份配置:
sudo cp -a /root/nginx-backup-日期/. /etc/nginx/
sudo nginx -t
sudo systemctl reload nginx
  1. 3. 如果只是证书本身有问题,可以让 Certbot 撤销并删掉这张证书,重新申请:
sudo certbot delete --cert-name 你的域名
  1. 4. 确认网站已恢复:curl -sI http://你的域名 | head -1 应重新返回 200 或 301。

答疑

常见问题

Certbot 要花钱吗?装完以后还需要每年付费续期吗?

不要钱。Certbot 是 EFF 开发的免费开源工具,证书由 Let's Encrypt 免费签发,每 90 天自动续期,不需要任何费用。如果有人告诉你「不续费证书就失效」,那说的是他自己卖的付费证书,不是 Let's Encrypt。免费 DV 证书和付费证书的加密强度、浏览器信任完全一样。

snap 安装和 apt、dnf 安装有什么区别,我该选哪个?

功能完全一样,都自带自动续期。snap 是 Certbot 官方推荐的安装方式,版本最新;apt 和 dnf 用的是系统软件源里的版本,可能稍旧但同样能用。Ubuntu 用 snap 最省事,Debian 要先装 snapd,CentOS 系列先装 epel-release 再装 certbot。选哪个都行,装完用 certbot --version 能输出版本号就说明成功了。

一张证书能不能同时包含根域名和 www?

能,而且建议这么做。申请时写两个 -d 参数,例如 -d 你的域名 -d www.你的域名,这样访问带 www 和不带 www 都不会报「名称不符」。Let's Encrypt 一张证书最多可以包含 100 个域名。

certbot renew 需要我手动执行吗?

不需要。安装 Certbot 时会自动建好定时任务,每天检查两次,证书到期前约 30 天自动续期并重新加载 Nginx 或 Apache。你只需要在装好后跑一次 certbot renew --dry-run 确认演练续期成功,再用 systemctl list-timers 配合 grep 确认定时器存在(名字是 certbot.timer 或 snap.certbot.renew.timer)。

网站是 Docker 或 Node.js 部署的,Certbot 插件认不出来怎么办?

用 webroot 方式:把网站文件所在目录传给 -w 参数,例如 sudo certbot certonly --webroot -w /var/www/html -d 你的域名。Certbot 会在该目录的 .well-known/acme-challenge/ 下放临时文件供验证,拿到证书后你自己把证书路径配到网页软件里。注意这种方式续期后不会自动重载网页软件,需要在 /etc/letsencrypt/renewal-hooks/deploy/ 放一个执行 systemctl reload nginx 的脚本。

证书装好了,浏览器为什么还提示不安全?

最常见的是混合内容:页面本身是 https,但里面的图片、脚本、样式还是 http 地址。按 F12 打开控制台,搜索 Mixed Content,把列出的 http 地址改成 https;也可以在 Cloudflare 打开自动 HTTPS 重写。另一种情况是只装了域名证书没装中间证书,手机端会提示证书不可信,Nginx 要用 fullchain.pem 而不是 cert.pem。

核实

资料来源与核实记录

价格、政策与版本信息均注明来源和核实日期。

事实来源核实日期
Certbot 官方安装说明(Nginx + Linux/snap)与申请命令certbot.eff.org2026-10-10
Let's Encrypt 验证方式(HTTP-01 / DNS-01)letsencrypt.org2026-10-10
Let's Encrypt 频率限制(同一组域名每周 5 次签发、每小时 5 次验证失败)letsencrypt.org2026-10-10
Let's Encrypt 证书有效期将缩短至 64/45 天(公告 2025-12-02)letsencrypt.org2026-10-10
Let's Encrypt 到期提醒邮件服务已结束(2025-06-26)letsencrypt.org2026-10-10
CA/Browser Forum SC-081v3 证书有效期时间表(200→100→47 天)cabforum.org2026-10-10
nginx 官方文档:ssl_certificate 与证书链(fullchain)nginx.org2026-10-10

更新记录

2026-10-12 · v1.0:上线:指南第 4 章改写为独立路线教程,补 5 分钟自查流程、失败排查表、常见坑与回滚步骤。

本专题全文以 CC BY 4.0 协议开源,可转载、改编,请注明出处:GitHub · iPythoning/ssl-guide-zh

延伸

  1. 教程阅读约 60 分钟
    6 道题找到你的路线
  2. 路线 B:宝塔面板

    服务器装了宝塔面板的话,装证书全程点鼠标:网站 → 站点设置 → SSL → Let's Encrypt → 申请证书 → 开启强制HTTPS,5~10 分钟搞定,含失败排查与通配符(DNS 验证)。

    教程阅读约 13 分钟
    宝塔面板官网首页(bt.cn)

交给我们

不想自己动手?

泓森互联提供 SSL 证书终身维护服务:部署、监控、自动续期与失效应急,一次购买长期有效。服务范围与价格以服务页为准;也可以先做免费体检,把情况摸清楚再决定。

留个联系方式,我们帮你看看

不确定自己的网站是什么情况?留下信息,或直接 预约诊断,我们把体检结果和修复路径说清楚。

体验 AI 销售