术语表
什么是 Let's Encrypt——让 HTTPS 自动化的免费证书颁发机构
Let's Encrypt 是一家免费的证书颁发机构(CA),签发 TLS/SSL 证书。ACME 会自动验证域名控制权,因此签发与续期都无需人工;证书有效期仅 90 天,以此强制自动化。本文讲解其原理(certbot/Caddy),以及如何避免头号事故——续期悄悄中断、导致证书过期。
「我想用 HTTPS,但证书又贵又麻烦」——Let's Encrypt 改变了这个前提。它是免费的,而且从签发到续期都可以完全自动化。下面从防御者的视角讲解它的工作原理。
工作原理:自动证明域名控制权(ACME)
传统证书意味着提交申请、递交身份材料、然后等待——全靠人工。Let's Encrypt 用 **ACME(Automatic Certificate Management Environment,自动证书管理环境)**取代了这一切,这套协议把整个交互过程变成机器对机器的步骤。
关键在于:它只验证对域名的控制权(域名验证,DV),并不审核企业的法律存在,正因如此整个流程才够轻量、可以完全自动化。而加密本身丝毫不比付费证书弱。
90 天有效期强制自动化
Let's Encrypt 证书的有效期为 90 天。这个短窗口是刻意为之的。
缩小密钥泄露的影响范围
万一服务器的私钥泄露,短有效期证书就缩小了它可被滥用的时间窗口——即便吊销有所延迟,它也会自行过期。
让自动续期成为默认
90 天用手工续期并不现实,因此运维人员不得不自动化——这把整个行业推向了「证书是要自动轮换的东西」这一观念。实践中,续期工具会在到期前约 30 天开始尝试。
所以真正的工作是监控
自动续期可能会悄悄停掉——cron 坏了、权限变了、域名校验不再通过。如果你没察觉,90 天后它就过期了。防御性的习惯是监控续期是否成功以及剩余天数。
本站之见:我们自己就这么用(自动 TLS)
本站运行在 Caddy 这款 Web 服务器上,它只要把域名指向它,就会自动签发并续期 Let's Encrypt 证书(几乎没有任何证书配置)。「不必再为证书操心」正是目标所在:人工经手的地方越少,因忘记更换而导致的过期事故就越少。反之,如果你用 cron 运行 certbot,稳妥的做法是去监控那个 cron 是否真的还在运行——而不是想当然地相信它在运行。
头号事故:续期中断,随后过期
团队在 HTTPS 上最常踩的坑并不是攻击——而是证书过期。一旦过期,浏览器会弹出整页警告,访客几乎都会离开。原因几乎总是「续期自动化坏掉了,却没人察觉」。
正因如此,你应该有一种办法来定期查看自己证书的有效期。本站的网站安全审计会在你已验证归属的网站上检查 TLS 证书(剩余天数、到期时间、过时的协议),与其他检查项一并进行。先把续期自动化,再从外部验证这套自动化是否还活着——这两层习惯几乎能完全杜绝过期事故。
接下来阅读
- 从事故中学习:Heartbleed(一个曾威胁全球密钥的 TLS/OpenSSL 漏洞)
- 检查你自己的网站:网站安全审计(TLS 证书、响应头、暴露文件,一份报告搞定)
- 打好基础:面向独立开发者的安全基线清单
FAQ
QLet's Encrypt 真的免费吗?它和付费证书有什么区别?
签发与续期都是免费的。Let's Encrypt 只做域名验证(DV)——自动确认你控制着该域名。加密强度与付费证书完全相同,浏览器显示的也是同样的锁形图标。区别在于它没有审核企业法律身份的组织验证/扩展验证(OV/EV)环节,也没有保险赔付。对于个人网站和小型服务,一张免费的 DV 证书几乎总是足以支撑 HTTPS。
Q为什么证书只有 90 天有效期?这不是很麻烦吗?
短有效期是一种设计选择,而非弱点。它限制了泄露的私钥被滥用的时长,并促成了一种把续期自动化的文化。要避免麻烦,就把续期自动化(多数工具会在到期前约 30 天起自动续期)。真正的隐患恰恰相反——每年手动更换一次证书,然后忘记、任由它过期。
Q用什么工具来配置?
常见的有 certbot(与 Apache/Nginx 搭配使用广泛)和 Caddy(一款 Web 服务器,无需任何证书配置即可提供 HTTPS 并自动续期)。acme.sh 和 Traefik 也支持 ACME。如果你需要通配符证书(*.example.com),则通过 DNS-01 方式获取,把验证值放进 DNS 记录里。