ArcLibrary

mTLS(双向 TLS)

服务端不仅亮证书,也要求客户端亮证书 —— 服务网格 / 零信任的基础。

mTLS零信任服务网格
核心 · Key Idea

一句话:mTLS = mutual TLS,双方都验证对方证书。在内网 / 服务网格里替代「IP 白名单 + 共享 Token」,做到密码学级别的服务身份认证。

是什么#

普通 HTTPS:客户端验服务器证书。 mTLS:客户端自己也持证书,握手时一并发给服务端,服务端用自己的 CA 验签

普通 TLS:       客户 → 验 → 服务端证书
mTLS:    客户 ⇄ 互验 ⇄ 服务端 + 客户端证书

打个比方#

打个比方 · Analogy

普通 HTTPS 像进商场:你看到商场的招牌就放心走进来。
mTLS 像进公司大厦:保安要看你的员工卡才放你进;同时你也确认这是公司正门而不是钓鱼办公室。

关键概念#

客户端证书Client Certificate
由组织内部 CA 签发,标识一个服务 / 一台机器 / 一个用户。
私有 CAInternal CA
组织自己的根证书,分发给所有服务,签发短期证书。
SPIFFE / SPIRE服务身份框架
云原生标准:自动发证、轮换、绑定 K8s ServiceAccount。
证书轮换Cert Rotation
短期证书(小时 / 天级),自动续签。被偷的证书自然过期。
零信任Zero Trust
不假设任何网络位置安全 —— 每次访问都靠身份证书 + 策略验证。

怎么工作#

服务网格(Istio / Linkerd)把这套在 sidecar 里完全自动化

实操要点#

  • 手动配 nginx mTLS

    ssl_client_certificate /etc/nginx/ca.crt;
    ssl_verify_client on;
  • 服务网格自动 mTLS:Istio / Linkerd 默认开启,sidecar 之间所有流量都是 mTLS。

  • API Gateway 上的 mTLS:金融 / 银行常用 —— 移动 App 用客户端证书证明「你是真 App」。

  • 证书生命周期:用 cert-manager(K8s)/ Vault PKI 自动签发短期证书,避免人工运维。

  • 撤销:CRL / OCSP 实操困难,短期证书 + 不续签是更现实的撤销手段。

易混点#

API Token / JWT
应用层 bearer。
一次泄漏多次使用。
mTLS
传输层证书。
每次握手互验,**密码学绑定**到具体服务实例。

延伸阅读#