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

> 2026-02-11 起 Let's Encrypt 默认 classic 配置不再包含 clientAuth 用途，临时的 tlsclient 配置已于 2026-07-08 停用，mTLS 需改用私有 CA。

Source: https://ssl.sh/zh/news/lets-encrypt-ends-tls-client-authentication/
Last updated: 2026-11-10

Let's Encrypt 的证书已经不能再当作 TLS 客户端证书使用了。2026 年 2 月 11 日起，默认 classic 配置签发的证书不再包含 clientAuth [扩展密钥用途（EKU）](https://ssl.sh/zh/glossary/extended-key-usage/)，新证书只能用于服务器认证。为来不及迁移的用户保留 clientAuth 的临时 tlsclient 配置，也已在 2026 年 7 月 8 日停用。

## 发生了什么

去掉 clientAuth，与整个行业转向“TLS 服务器认证专用证书体系”的趋势一致，推动者是 [Chrome 根证书计划的新政策](https://ssl.sh/zh/news/chrome-dedicated-tls-hierarchies/)。Let's Encrypt 在 2025 年 5 月 14 日公布了这项计划。此前它的证书在 EKU 扩展里同时写着两种用途：TLS Web Server Authentication（服务器认证）和 TLS Web Client Authentication（客户端认证）。后者让服务器在[双向 TLS](https://ssl.sh/zh/glossary/mtls/) 中可以把同一张证书当作客户端证书出示。Let's Encrypt 新的 [Generation Y 中间证书](https://ssl.sh/zh/news/lets-encrypt-generation-y-hierarchy/)同样不含 clientAuth。

时间线：

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

## 影响谁

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

- **服务器之间的双向 TLS**：双方各自拿公开证书当[客户端证书](https://ssl.sh/zh/glossary/client-certificate/)出示，比如用这种方式认证合作方的 API 接口；
- **邮件中继等主动对外连接的服务器**：连接时出示自己的证书，而接收方会检查客户端证书的 EKU；
- **任何会校验客户端证书用途的软件**，比如一些内部网关、消息队列、数据库的 TLS 客户端认证配置。

典型症状是校验方握手失败，OpenSSL 一般会报 `unsupported certificate purpose`。其他软件栈的报错信息见 [clientAuth EKU 被移除](https://ssl.sh/zh/errors/client-auth-eku-removed/)。

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

## 需要做什么

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

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

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

客户端认证请改用自己掌控的[私有 CA](https://ssl.sh/zh/glossary/private-ca/)。有效期和用途由你决定，校验方也只信任你自己的 CA，这比“接受任何公开证书”更安全：

```bash
# 用自建 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 证书：

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

完整的配置步骤见 [mTLS 指南](https://ssl.sh/zh/learn/mtls/)，也可以把证书粘贴到[证书解析工具](https://ssl.sh/zh/tools/certificate-decoder/)里查看 EKU。
