# mTLS（双向 TLS 认证）是什么？定义、例子与常见误区

> mTLS 是服务器和客户端在握手中都用 X.509 证书向对方证明身份的 TLS，也叫双向 TLS 认证。

Source: https://ssl.sh/zh/glossary/mtls/
Last updated: 2026-11-10

mTLS（Mutual TLS）不是一个新协议，而是开启了客户端认证的标准 TLS。服务器照常出示自己的证书，然后要求客户端也出示证书；客户端发送[客户端证书](https://ssl.sh/zh/glossary/client-certificate/)并用私钥对握手签名，服务器再用自己信任的 CA 校验这张证书。握手结束后，不只是客户端知道服务器是谁，服务器也确切知道客户端是谁。

## 为什么重要
mTLS 是零信任网络和服务网格（如 Istio、Linkerd）里服务间认证的主力，也广泛用于物联网设备身份、银行和支付类开放 API，国内一些金融机构的对接接口也要求双向证书认证。身份证书一般由[私有 CA](https://ssl.sh/zh/glossary/private-ca/)签发，有效期短、自动轮换。由于公共 CA 正在把 clientAuth 从 TLS 证书中移除（Let's Encrypt 自 2026 年 2 月 11 日起；Chrome 要求 2027 年 3 月 15 日起签发的用户证书只含 serverAuth），客户端一侧不要再依赖公共服务器证书。

## 例子
```nginx
server {
    listen 443 ssl;
    server_name api.example.com;
    ssl_certificate        /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key    /etc/nginx/certs/server.key;
    ssl_client_certificate /etc/nginx/certs/client-ca.pem;
    ssl_verify_client      on;
}
```

校验结果可以从 `$ssl_client_verify` 变量读取，客户端证书主题在 `$ssl_client_s_dn` 里，可交给后端做授权判断。

## 常见误区
- **mTLS 是另一种协议。** 它就是开启了可选客户端认证步骤的 TLS 1.2 或 1.3。
- **用了 mTLS 就不用做授权。** mTLS 只解决"你是谁"，"你能做什么"仍要应用自己判断。
- **经过任何代理都能用。** 如果负载均衡做了 [TLS 终止](https://ssl.sh/zh/glossary/tls-termination/)，后端看不到客户端证书，除非代理自己校验并把身份信息转发过去。

## 相关术语

- [客户端证书](https://ssl.sh/zh/glossary/client-certificate/): 客户端证书是 TLS 客户端在握手时出示、用来向服务器证明自身身份的 X.509 证书。
- [TLS 握手](https://ssl.sh/zh/glossary/tls-handshake/): TLS 握手是 TLS 连接开始时的一组消息交换，客户端与服务器在其中协商协议版本和密码套件、验证服务器身份并派生会话密钥。
- [私有 CA](https://ssl.sh/zh/glossary/private-ca/): 私有 CA 是企业为自己的系统和设备搭建的证书颁发机构，其根证书只在企业主动安装的设备上受信任。
- [EKU](https://ssl.sh/zh/glossary/extended-key-usage/): EKU 即扩展密钥用途，是列出证书可用于哪些目的（如 serverAuth 服务器认证、clientAuth 客户端认证、代码签名）的 X.509 扩展。
- [TLS 终止](https://ssl.sh/zh/glossary/tls-termination/): TLS 终止是指网络路径上客户端 TLS 连接结束并被解密的位置，可以是 CDN 边缘、负载均衡、反向代理，也可以是应用服务器本身。
- [反向代理](https://ssl.sh/zh/glossary/reverse-proxy/): 反向代理是代表后端服务器接收客户端连接、再把请求转发给后端的服务器，通常同时承担 TLS 终止。
- [QWAC](https://ssl.sh/zh/glossary/qwac/): QWAC 是欧盟 eIDAS 框架下由合格信任服务提供者签发、把网站与经核实的法人或自然人绑定的证书。
