# What Is mTLS (Mutual TLS)? Definition and Examples

> mTLS (mutual TLS) is TLS in which both the server and the client authenticate each other with X.509 certificates during the handshake.

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

Mutual TLS is not a separate protocol but standard TLS with client authentication turned on. The server presents its certificate as usual, then requests one from the client; the client sends a [client certificate](https://ssl.sh/glossary/client-certificate/) and signs the handshake with its private key, and the server validates that certificate against a CA it trusts. After the handshake both ends know who the other party is, instead of only the client knowing the server.

## Why it matters
mTLS is the workhorse of service-to-service authentication in zero-trust networks and service meshes such as Istio and Linkerd, of device identity in IoT, and of regulated APIs such as PSD2 open banking with [QWACs](https://ssl.sh/glossary/qwac/). Identities usually come from a [private CA](https://ssl.sh/glossary/private-ca/) with short certificate lifetimes and automated rotation. Because public CAs are removing the clientAuth EKU from TLS certificates (Let's Encrypt from 2026-02-11; Chrome requires serverAuth-only subscriber certificates from 2027-03-15), mTLS deployments should not depend on public server certificates for the client side.

## Example
```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;
}
```

nginx exposes the verification result in `$ssl_client_verify` and the client subject in `$ssl_client_s_dn`, which the application can use for authorization.

## Common misconceptions
- **mTLS is a different protocol.** It is ordinary TLS 1.2 or 1.3 with the optional client-authentication step enabled.
- **mTLS replaces authorization.** It proves identity; the application still has to decide what that identity may do.
- **mTLS works through any proxy.** If a load balancer performs [TLS termination](https://ssl.sh/glossary/tls-termination/), the backend never sees the client certificate unless the proxy verifies it and forwards the identity.

## Related terms

- [客户端证书](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 框架下由合格信任服务提供者签发、把网站与经核实的法人或自然人绑定的证书。
