Let's Encrypt

Let's Encrypt 证书不再支持 TLS 客户端认证

作者: · 最后核实 发布

Let's Encrypt 的证书已经不能再当作 TLS 客户端证书使用了。2026 年 2 月 11 日起,默认 classic 配置签发的证书不再包含 clientAuth 扩展密钥用途(EKU),新证书只能用于服务器认证。为来不及迁移的用户保留 clientAuth 的临时 tlsclient 配置,也已在 2026 年 7 月 8 日停用。

发生了什么

去掉 clientAuth,与整个行业转向“TLS 服务器认证专用证书体系”的趋势一致,推动者是 Chrome 根证书计划的新政策。Let's Encrypt 在 2025 年 5 月 14 日公布了这项计划。此前它的证书在 EKU 扩展里同时写着两种用途:TLS Web Server Authentication(服务器认证)和 TLS Web Client Authentication(客户端认证)。后者让服务器在双向 TLS 中可以把同一张证书当作客户端证书出示。Let's Encrypt 新的 Generation Y 中间证书同样不含 clientAuth。

时间线:

  • 2025-05-14:公布变化。
  • 2025-10-01:推出临时的 tlsclient 配置。
  • 2026-02-11:classic 配置去掉 clientAuth。
  • 2026-07-08:tlsclient 配置停用。

影响谁

大部分网站不受影响,因为浏览器只检查 serverAuth。受影响的是下面这些场景:

  • 服务器之间的双向 TLS:双方各自拿公开证书当客户端证书出示,比如用这种方式认证合作方的 API 接口;
  • 邮件中继等主动对外连接的服务器:连接时出示自己的证书,而接收方会检查客户端证书的 EKU;
  • 任何会校验客户端证书用途的软件,比如一些内部网关、消息队列、数据库的 TLS 客户端认证配置。

典型症状是校验方握手失败,OpenSSL 一般会报 unsupported certificate purpose。其他软件栈的报错信息见 clientAuth EKU 被移除。

在阿里云、腾讯云等平台购买的 DV/OV 证书同样来自公开 CA。按照 Chrome 的政策,2027 年 3 月 15 日起签发的公开 TLS 证书只能包含 serverAuth(尚未生效),所以换一家公开 CA 并不能长期解决问题。

需要做什么

客户端认证改用私有 CA。先检查一张证书允许的用途:

openssl x509 -in client.pem -noout -ext extendedKeyUsage

现在的 Let's Encrypt 证书只会显示 TLS Web Server Authentication。

客户端认证请改用自己掌控的私有 CA。有效期和用途由你决定,校验方也只信任你自己的 CA,这比“接受任何公开证书”更安全:

# 用自建 CA 签发只含 clientAuth 用途的客户端证书
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
  -days 365 -out client.crt \
  -extfile <(printf "extendedKeyUsage=clientAuth\nbasicConstraints=CA:FALSE")

在 nginx 校验方,把客户端 CA 指向这张私有 CA 证书:

ssl_client_certificate /etc/nginx/client-ca.crt;
ssl_verify_client on;

完整的配置步骤见 mTLS 指南,也可以把证书粘贴到证书解析工具里查看 EKU。

常见问题

普通 HTTPS 网站受影响吗?

不受影响。浏览器只检查服务器证书是否允许 serverAuth 用途,Let's Encrypt 证书仍然包含这一项。只有把 Let's Encrypt 证书当作客户端证书出示的场景才受影响。

还能申请到带 clientAuth 的 Let's Encrypt 证书吗?

不能。classic 配置自 2026 年 2 月 11 日起去掉了 clientAuth,临时的 tlsclient 配置也在 2026 年 7 月 8 日停用。客户端证书请改用私有 CA 签发。

客户端证书缺少 clientAuth 时会报什么错?

通常是校验方握手失败,OpenSSL 一般报 unsupported certificate purpose。其他 TLS 实现会给出各自的报错信息。

资料来源

  1. Let's Encrypt:停止支持 TLS 客户端认证
  2. Let's Encrypt:Profiles