SSL证书免费证书怎么选:Let’s Encrypt 自动续期配好就不再过期

倪叶明

作者

更新于

免费 SSL 证书选 Let's Encrypt,签发靠服务器上装的 ACME 客户端,官方推荐 Certbot,自动续期配好之后不用你每个月上去点一次。如果你自己跑客户端,证书的获取和续期都在你自己的服务器上完成,Let's Encrypt 那个网站只是信息展示,获取证书的过程一步都不在它那儿发生。

对出海做站的人来说,HTTPS 不是装一次就完的动作,是一项要跟着站点跑的维护。证书一过期,浏览器直接拦,投放链接、支付回调、邮件里的链接都会跟着出问题。猎者出海把 SSL 放在上线检查的前面,原因就在这。

  • 谁签发:Let's Encrypt,通过基于 ACME 协议的自动化 API 签发,官方推荐大多数人从 Certbot 开始。
  • 有效期:默认 90 天,6 天的短周期证书对所有订阅者可选。
  • 用什么配:certbot 或 acme.sh 这类 ACME 客户端,续期由客户端按计划执行,不用人插手。
  • 先问一句:托管商能代管证书的话,你不用自己跑客户端,面板里确认续期开关是开的就行。

这篇讲的是从选客户端到配好续期、再到出问题怎么回查的完整走法,重点在自动续期这一步。

免费 SSL 证书是谁签发的,为什么必须装客户端

证书不是你在网页上点一下就拿到的。Let's Encrypt 官方写得很清楚,它通过基于 ACME 协议的自动化 API 签发证书,所以要拿到证书,必须在服务器上装一款叫 ACME client 的软件。同一页还有一句更关键:「No part of the process for getting a certificate happens on this website, which is merely informational.」网站只是信息展示。

Let's Encrypt 文档页说明免费 SSL 证书须装 ACME 客户端签发
官网说明截图:证书签发不在网站上发生,必须装 ACME 客户端。

Certbot 干两件事。一是获取证书,自动完成证明域名控制权的验证步骤,把证书存到 /etc/letsencrypt/live/ 并按计划续期。二是可选地把证书安装到支持的 Web 服务器上。它在命令行里跑,多数场景要登上服务器通过 SSH 操作,账号得有执行命令的权限。非 root 用户登录的话,命令前一般要加 sudo。

还有一种情况不用自己跑客户端:托管商替你申请和管理 Let's Encrypt 证书。这种时候服务商在运营 ACME 客户端,你不需要自己操心装和跑。所以动手之前先确认一件事,面板里是不是已经带了免费证书和一键续期。带的话这一整篇的大部分步骤都跟你无关,你要看的只是续期有没有开着。

面板里手动开启 HTTPS 的那套操作,跟这里讲的客户端配法是两条路,网站开启https加密协议走的是前面那条,点几下就好,适合不想碰命令行的人。

免费证书和付费证书差在哪,什么情况才该买付费的

能核的差别有几条。免费证书期限短,靠客户端自动签发和续期,不需要下单也不需要等审核。付费证书走 CA 和代理商下单,国内多数是通过云厂商或代理商买。普通展示站、博客、外贸落地页用免费证书就够;碰上国密这类合规要求,才去买付费的。

国密那条线单独说一下。TLCP 是国内自己的安全通信协议,符合 GM/T 0054-2018,支持 SM2、SM3、SM4 国密算法,主要用在政务、金融这类合规场景。你的站是面向海外普通用户的展示站或电商落地页,碰不到这条线。真碰上招标文件里写明要国密证书,那就不是免费证书能解决的事,按对方要求买。

有两件事不该拿来当选择依据。一是赔付条款,各家不一样,买之前自己看合同。二是搜索引擎排名,证书管的是浏览器让不让你打开,排名是另一套东西。把这两条当卖点的话术很多,落到你的站上,先看期限和续期能不能自动化。

证书配好只是第一步,服务器本身的安全也得跟上,VPS搭建后怎么防止被攻击讲的是那一层,两边一起做才有意义。

用 certbot 配自动续期:从装到跑通的步骤

  1. 确认托管商是不是代管证书。代管就到此为止,下面几步跳过,只管确认续期开着。
  2. 装客户端。Certbot 官方把 Snap 标为推荐方式,另有 Docker、Pip 和系统包这几种替代。装完在命令行里能调出 certbot 就算成功。
  3. 选验证方式。不确定就用客户端默认设置或者 HTTP-01。HTTP-01 只能走 80 端口,ACME 标准不允许客户端指定任意端口,它也不能用来签通配符证书。
  4. 跑命令。要获取并安装证书用 certbot run,直接写 certbot 也一样。只想拿证书、不装到任何地方,用 certbot certonly。域名用 -d 指定,多个域名就多写几个 -d。
  5. 确认结果。看输出里证书保存路径是不是 /etc/letsencrypt/live/,续期由客户端按计划执行,不用你写额外的定时任务。

走 webroot 插件的话,命令行里要同时带上 certonly 和 --webroot,再用 --webroot-path 或 -w 指定网站根目录。它的工作方式是在 ${webroot-path}/.well-known/acme-challenge 下面,为每个请求的域名创建临时文件,让 Let's Encrypt 的验证服务器通过 HTTP 请求来校验。这里有个前提,服务器要能提供隐藏目录下的文件,如果 /.well-known 被特殊处理过,得先改配置。

certbot 命令行输出显示免费 SSL 证书保存到 /etc/letsencrypt/live/ 路径
实操截图:跑完 certbot,确认证书落在 /etc/letsencrypt/live/ 下。

用 standalone 插件的话,它要绑定 80 端口做验证,可能要先把现有的 Web 服务器停掉。用 Nginx 插件之前建议先备份 Nginx 配置,出了问题可以用 certbot --nginx rollback 把配置改动撤回。DNS 插件不包含在默认安装里,要另外装,可以从系统包管理器、Docker 镜像或 snap 获取。

客户端如果要求填 ACME API 端点,地址是 https://acme-v02.api.letsencrypt.org/directory,照抄就行,不用自己拼。验证失败的时候先回查两处,80 端口通不通,防火墙和云厂商安全组放没放行。用 --manual 签的证书不支持自动续期,除非再配一个 --manual-auth-hook 的钩子脚本把验证动作自动做完,所以能用别的插件就用别的插件。

用面板建站的人走的是另一条路,建站点到开 SSL 的四步是在面板里点出来的,不用登服务器敲命令,适合还没熟悉命令行的人。

用 acme.sh 或 DNS 验证配续期:通配符证书这条路的做法

acme.sh 是 Let's Encrypt 官方客户端列表里的一款,兼容 bash、dash 和 sh。官方页只列了它是客户端,没给安装命令和参数,具体命令按它自己的文档来,这里讲的是这条路怎么走通。

通配符证书只能走 DNS-01。官方写,用 DNS 做域名验证是拿到通配符证书的唯一方式。原因是验证动作落在 DNS 记录上,不依赖 80 端口和 Web 服务器。代价是你得让客户端能改 DNS 记录,所以只有 DNS 服务商提供可用于自动化更新的 API 时,DNS-01 才值得用。没有 API,每次续期都要手动去加记录,自动化就断了。

签通配符的时候有个细节要盯住。只包含 *.example.com 的证书对 example.com 无效,因为替换的标签不能为空。要把裸域一起加进证书里,两个名字都写上。漏了裸域,主域名访问会报名称不匹配,www 那个子域反而正常,现象会让人往别处找原因。

凭据是这条路最容易出问题的地方。官方把话写得很直:把完整的 DNS API 凭据放在 Web 服务器上,会显著放大服务器被入侵之后的后果。最佳实践是用权限范围更窄的 API 凭据,或者在独立服务器上做 DNS 验证,再自动把证书复制到 Web 服务器。前一种更简单,后一种更干净,按你手上有什么选。

还有一个时间因素。DNS 服务商如果没有传播状态查询能力,就得把客户端配置成等足够长的时间再触发验证,官方说这常常长达一小时。等的时间不够,验证请求跑在旧记录上,就会报验证失败。

从空白 VPS 到能跑 HTTPS 的站,中间还有装环境、绑域名这些步骤,VPS搭建网站教程是从头走一遍的版本。证书这一步要放在站点能正常访问之后做,顺序反了会白忙。

免费证书的有效期和限制:一张表看清哪些数会影响你

下面这几个数会直接影响你配续期的节奏,其他的额度不用管。

项目 数值 对你的影响
默认有效期 90 天 必须自动化,手动续不可行
短周期证书 6 天,所有订阅者可选 自动化要求更高
未来最长有效期 2028 年 2 月前降到 45 天 续期频率会继续变高
单证书标识符上限 100 个 多域名合并成一张时的天花板
相同标识符集合 每 7 天 5 张 反复重装最容易撞这条

这五个数里,前三个决定你的续期任务多久跑一次,后两个决定你调试的时候能试几次。账户数、订单数这类额度属客户端开发范畴,普通站长不用管。

期限越来越短是有原因的。官方给了两条:限制错发和密钥泄露造成的损害,以及鼓励自动化。官方还说,证书管理一旦自动化,更短的有效期并不比更长的更不方便。当初选这个期限,是因为它短到足以强力推动自动化,又长到能手动操作。现在这个手动操作的空间正在被收掉,靠人记着续期的做法迟早会出事。

证书过期导致网站打不开,怎么提前发现、怎么救

风险跟几年前不一样了。以前期限是一年,忘了续,到期那天才炸。现在默认期限短得多,续期自动化一旦坏了,你也不会马上知道,等发现的时候站已经打不开了。真正要盯的是剩余天数和到期提醒。

定期看三项就够。

检查项 看什么
证书到期日 剩余天数在减少,续期有没有把它顶回去
续期任务 计划任务或客户端自带的定时器是否在跑
验证方式 是 HTTP-01 还是 DNS-01,对应端口和 DNS 权限是否还通

真出问题,先用 SSL Labs 的 Server Test 跑一次,官方也推荐拿它测站点。现代平台上最常见的原因是没提供正确的证书链。这里有个容易误判的地方,你本机浏览器能打开,不代表没问题,中间证书可能被浏览器缓存了。手机 App、支付网关、监控探针这些全新客户端没有缓存,会直接拒绝连接。

另一种失败是名称不匹配。证书签给 example.com,却部署在 www.example.com 上,验证就会失败。SAN 的覆盖范围要单独核,别看到证书装上了就以为两个域名都覆盖了。

用 WordPress 的话,HTTPS 还有一层站内的问题,比如混合内容和站点地址设置,WordPress HTTPS问题讲的是那一层,证书装好之后再看。

续期报错怎么归类:三种失败和对应动作

续期失败,先分清楚卡在哪一层。官方把原因写得比较清楚,对着归类就行,不用一条条乱试。

第一种,HTTP-01 和 TLS-ALPN-01 验证失败。官方说这类失败通常来自网络或防火墙配置,导致 Let's Encrypt 的验证服务器访问不到你的服务器。先查 80 端口通不通,防火墙有没有放行,云厂商的安全组有没有开。还有一个前提,ISP 封了 80 端口的话 HTTP-01 直接不可用,这种情况少见,但部分住宅宽带会这么做。HTTP-01 还会跟随重定向,最多 10 层,只接受跳到 http 或 https,且只到 80 或 443 端口,跳去别的端口一样失败。

第二种,DNS-01 验证失败。官方点名两个来源,初始设置漏了步骤,或者拼写错。去 DNS 后台看 _acme-challenge 的 TXT 记录写没写对,顺手把旧记录清掉。同名下可以有多条 TXT,但旧的堆着不清,响应体积一大,Let's Encrypt 就开始拒绝。有时候还需要在主 DNS 区建一条 CNAME 记录,让客户端在验证时把记录写到该写的地方。

第三种,撞速率限制。官方点了两个原因:反复重装客户端去排查一个不明错误,以及每次部署应用都把客户端的配置数据删掉。撞上之后没有临时重置的办法,只能等额度按时间回填,吊销证书也不会让额度重置。调试的时候把客户端指向 staging 环境,那边的限制显著更高,跑通了再切回生产。

还有一种不算失败,是端点忙。超过每个端点的整体请求限制,会收到 503 Service Unavailable,响应里带 Retry-After 头,按那个时间等就行,不用改配置。

AI 能帮哪几步配免费证书续期,哪几件必须自己上手

配证书这件事,AI 能接的是整理和归类,不能代替你执行。具体是这四步。

  1. 按你的服务器系统和 Web 服务器类型,从 Certbot 官方指令生成器里挑出对应组合,整理成一份待执行命令清单。
  2. 把 certbot 或 acme.sh 的报错原文贴给它,对照官方写的原因做归类,先判断属于端口、DNS 记录还是证书链哪一类。
  3. 起草一份续期检查清单,用表格,把要看哪几项、每项正常状态是什么写清楚。
  4. 把官方英文原句翻成中文解释,帮你理解规则,数字和期限必须回原文核对。

下面三条提示词是本文给的示例,不是官方模板,可以直接复制改。

「我的服务器是 [系统],Web 服务器是 [Nginx/Apache],域名是 [域名]。请按 Certbot 官方指令生成器的选项,列出我该选的软件和系统组合,以及对应的 certbot 命令,不要编造参数。」

「下面是我 certbot 续期失败的报错原文:[粘贴报错]。请只根据 Let's Encrypt 官方文档里写的原因(HTTP-01 走 80 端口、DNS-01 的 TXT 记录、证书链缺失)判断属于哪一类,并给出下一步要检查的一项。」

「请把这段 Let's Encrypt 官方原文翻成中文并解释术语:[粘贴原句]。数字、期限、端口号必须原样保留,不要补充原文没有的内容。」

有三件事必须你自己上手,AI 替不了。一是在服务器上执行选定的命令,看输出里证书保存路径是不是 /etc/letsencrypt/live/。二是走 DNS-01 时,去 DNS 服务商后台确认 _acme-challenge 的 TXT 记录写进去了,旧的清掉了。三是用 SSL Labs 的 Server Test 跑一次站点,看证书链和到期天数两项结果,决定要不要改配置。

整理官方文档里的数字、端口号和期限这类活,可以交给猎者出海的AI Agent,它按官方原文对照,不自己补参数。AI 给的东西都当草稿,参数落地前回原文核一遍。

常见问题

免费 SSL 证书有效期是多久?

官方默认值是 90 天,从 2015 年上线起就是这个期限,现在绝大多数签发的证书还是这个。期限还在往更短的方向推,所以续期应当交给自动化。

免费证书和付费证书到底差在哪?

免费证书靠客户端自动签发和续期,付费证书走 CA 和代理商下单。普通展示站、博客、外贸落地页用免费的就够,需要更长有效期、需要支持窗口、或者碰上国密合规要求才买付费的。

用 --manual 签的证书为什么不会自动续期?

--manual 模式靠人在现场完成验证动作,客户端没法在没人管的情况下重复这一步。官方写,这种证书要自动续期,必须配 --manual-auth-hook 加钩子脚本。能用别的支持自动续期的插件,就换插件。

通配符证书为什么必须用 DNS 验证?

官方写,用 DNS 做域名验证是拿到通配符证书的唯一方式。HTTP-01 只能走 80 端口,也明确不能签通配符。代价是你的 DNS 服务商要有能自动化更新的 API,否则每次续期都得手动改记录。

撞了速率限制能申请重置吗?

不能。撞到之后没有临时重置的办法,额度只能随时间逐步回填,吊销证书也不会重置。调试时把客户端指向 staging 环境,那边的限制显著更高。

证书在电脑上能打开,手机上却报错,是什么原因?

先查证书链。本机浏览器能开,往往是中间证书被缓存了,手机 App 和支付网关这类全新客户端没有缓存,会直接拒绝。用 SSL Labs 的 Server Test 跑一次,看链是否完整。

证书这块没有多少花样,配好、开着、定期看一眼。清单懒得自己写,可以让猎者出海的AI Agent按官方原文整理一版,判断还得自己做。

发表评论

发表回复

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