- Let's Encrypt 证书是免费的,有效期为 90 天,在我们的网页空间中会在后台自动续期
- 如果续期失败,几乎总是因为端口 80、错误的 DNS 记录,或拦截请求的反向代理
- 对于通配符证书(*.deine-domain.de),你需要使用 DNS-01 Challenge,而不是 HTTP-01
浏览器里的红色锁形图标吓跑的访客,比任何缓慢的加载时间都多。上面写着“不安全”,落在下单页面上的访客会在输入信用卡号之前就点击离开。Let's Encrypt 通过让证书免费,解决了网络上大部分场景中的这个问题——但“免费”不等于“一切自动搞定”,而这正是我们经常收到的支持请求的来源。
Let's Encrypt 的基本工作原理
Let's Encrypt 是一个证书颁发机构,它通过 ACME 协议自动验证你是否真的对某个域名拥有控制权,并据此为你签发一张域名验证型证书(DV)。不需要商业登记摘录,不需要电话沟通,也不需要像传统付费证书那样等待数天。验证通过所谓的 Challenge 完成,而 Challenge 的选择恰恰决定了之后的续期是能顺利完成,还是会因为一条晦涩的错误信息而中断。
| Challenge | 验证方式 | 适用场景 |
|---|---|---|
| HTTP-01 | 在你的域名下放置一个文件,Let's Encrypt 通过端口 80 读取它 | 端口 80 可正常访问的标准网页空间,每个域名/子域名对应一张证书 |
| DNS-01 | 你在域名的 DNS 中创建一条 TXT 记录,Let's Encrypt 会查询它 | 通配符证书、端口 80 未开放的服务器、内部系统 |
| TLS-ALPN-01 | 直接通过端口 443 借助 TLS 扩展进行验证 | 较少使用,通常是端口 80 必须长期保持关闭的情况 |
我们的网页空间中证书是如何运作的
如果你的域名已通过客户中心与你的网页空间关联,Plesk 会自行完成证书的签发和续期——你无需手动申请证书。前提是该域名确实指向我们的服务器,否则 HTTP-01 验证会失败,因为 Let's Encrypt 会到你的旧服务商那里而不是我们这里获取响应。关于如何正确设置相应的 DNS 记录,请参见文章《将域名与网页空间关联》。
- 在客户中心将域名与网页空间套餐关联,并设置 DNS 记录(A 记录或域名服务器)
- 在 Plesk 面板中打开“网站和域名” → “SSL/TLS 证书”,选择“Let's Encrypt”
- 选择域名变体(带 www 和不带 www),然后签发证书
- 在“托管设置”中启用从 HTTP 到 HTTPS 的跳转,避免旧流量停留在未加密的页面上
在自己的搭载网页空间的 Root 服务器上,原理是一样的,只是 ACME 客户端需要你自己负责。最常用的客户端是 Certbot:
apt install certbot python3-certbot-nginx
certbot --nginx -d deine-domain.de -d www.deine-domain.deCertbot 会自动创建一个 Cronjob 或 systemd Timer,每天检查两次是否需要续期。续期不会等到临近过期才进行,而是提前很多——这样即使出现问题,也有足够时间在页面真正带着过期证书上线之前发现它。
certbot renew --dry-run 如果这次演练顺利通过,真正的续期也会顺利完成。续期失败时该怎么办
几乎每一次续期失败,都可以归结为以下几个原因之一:
- 端口 80 被阻挡 —— 防火墙规则或过于严格的安全插件根本不放行 Let's Encrypt 的验证请求
- DNS 不再指向正确的服务器 —— 例如更换服务商后忘记了旧的 A 记录
- 反向代理或 CDN 拦截了请求 ——
/.well-known/acme-challenge/下的文件从未被真正的服务器返回 - 网站根目录权限不正确 —— ACME 客户端无法写入验证文件,或者网页服务器无法读取它
- 短时间内失败尝试过多 —— Let's Encrypt 限制了同一域名在一段时间内可申请新证书的次数,因此测试时更适合先使用 Staging 模式
certbot --staging)——它不会计入真实证书的限额。一个典型的错误信息是“Invalid response from ... : 404”——这几乎总是意味着 Challenge 文件没有出现在 Let's Encrypt 期望的位置。首先检查该域名是否确实解析到我们这里,然后检查是否有代理或跳转规则对 /.well-known/ 路径的处理方式与网站其余部分不同。
通配符证书
对于一次性覆盖所有子域名的证书(*.deine-domain.de),HTTP-01 是不够的——Let's Encrypt 在这种情况下强制要求使用 DNS-01,因为通配符无法通过单一可访问的 URL 来验证。因此你需要拥有域名 DNS 管理的访问权限,并能够在其中设置 TXT 记录,无论是每次续期时手动设置,还是通过 ACME 客户端的 DNS 插件自动完成。
- 免费,没有反复出现的证书费用
- 可以完全自动化,无需手动续期
- 在 Plesk、Nginx、Apache 以及所有主流浏览器中都得到广泛支持
- 仅提供域名验证,没有像 EV 证书那样的组织验证
- 90 天的短有效期让你依赖于一套正常运作的自动化机制
- 通配符证书需要 DNS-01,也就是需要对 DNS 管理的 API 访问权限
一张没有人续期的证书,不过是绕了个弯的过期日期。
检查是否成功
签发或续期之后,只需简单检查一下:
echo | openssl s_client -connect deine-domain.de:443 -servername deine-domain.de 2>/dev/null | openssl x509 -noout -dates输出会显示 notBefore 和 notAfter——如果 notAfter 大约在 90 天后,就说明一切都是最新的。此外也值得直接在浏览器中查看:点击锁形图标,查看证书详情,颁发者应该是“Let's Encrypt”或“R-某某”(当前的中间 CA)。如果加密是你合规要求的一部分,也可以看看我们关于德国境内网页空间的合规背景介绍文章《在德国进行网页空间托管——安全、灵活且符合 GDPR》。