Privacy Proxy 要求客户端在代理流量之前进行身份验证。本页介绍了受支持的身份验证方法以及何时使用它们。
Privacy Proxy 支持三种身份验证方法:
| 方法 | 使用场景 | 隐私级别 |
|---|---|---|
| 预共享密钥 (PSK) | 概念验证、测试 | 较低 |
| Privacy Pass 令牌 | 客户端到服务器 | 高 |
| mTLS | 服务器到服务器 | 较高 |
预共享密钥在开发和概念验证测试期间提供了一种简单的身份验证方式。Cloudflare 提供一个密钥,客户端在每个请求中都包含该密钥。
在 Proxy-Authorization 标头中包含 PSK:
CONNECT example.com:443 HTTP/2
Host: example.com
Proxy-Authorization: Preshared <YOUR_PSK>代理会验证该密钥,如果匹配则允许连接。
PSK 身份验证具有一些局限性,使其不适用于生产环境。
- 共享机密:所有客户端都使用相同的密钥,因此您无法撤销单个用户的访问权限。
- 无单用户速率限制:您无法实施针对单个用户的配额或限制。
- 可关联性:代理可以将所有使用相同 PSK 的请求关联起来,这会降低用户隐私。
请仅将 PSK 用于测试。对于生产部署,请使用 Privacy Pass 令牌。
Privacy Pass ↗ 是一种允许客户端在不透露身份的情况下进行身份验证的协议。令牌在密码学上是不可关联的,这意味着代理无法将来自同一用户的不同请求关联起来。
Privacy Pass 使用三方架构:
- 证明者 (Attester):验证客户端是否为合法用户(例如,拥有有效账户)并将令牌请求转发给发行者。
- 发行者 (Issuer):对盲化令牌进行签名,而不知道是哪个客户端请求了这些令牌。
- 源站 (Privacy Proxy):接受令牌作为授权证明。
┌──────────┐ 1. Attestation request ┌──────────┐
│ │ ──────────────────────────▶ │ │
│ Client │ │ Attester │
│ │ ◀────────────────────────── │ │
└──────────┘ 2. Attestation OK └──────────┘
│
│ 3. Blinded token request
▼
┌──────────┐ 4. Forward request ┌──────────┐
│ │ ──────────────────────────▶ │ │
│ Attester │ │ Issuer │
│ │ ◀────────────────────────── │ │
└──────────┘ 5. Signed blinded token └──────────┘
│
│ 6. Return to Client
▼
┌──────────┐
│ Client │ (unblinds and stores token)
└──────────┘客户端通过证明者发送令牌请求以保持不可关联性。这确保了发行者无法将令牌请求与特定的证明事件或客户端身份关联起来。
┌──────────┐ 1. Present token ┌──────────┐
│ │ ──────────────────────────▶ │ │
│ Client │ │ Privacy │
│ │ ◀────────────────────────── │ Proxy │
└──────────┘ 2. Connection OK └──────────┘Privacy Proxy 使用发行者的公钥验证令牌。代理只能得知令牌是否有效,而无法得知该令牌是发行给谁的。
令牌发行过程:
- 客户端向证明者证明其身份(例如,通过登录账户)。
- 证明者确认客户端有效。
- 客户端生成盲化令牌并将其发送给发行者。
- 发行者对盲化令牌进行签名并返回。
- 客户端对令牌进行去盲化并存储。
在发起请求时:
- 客户端在
Proxy-Authorization标头中包含一个令牌。 - 代理使用发行者的公钥验证令牌签名。
- 如果令牌有效,代理允许连接。
由于令牌在发行期间被盲化,因此发行者无法将令牌与特定的发行请求关联起来。代理只能看到令牌有效,而不知道它是发行给谁的。
Privacy Pass 令牌使用 PrivateToken 方案包含在 Proxy-Authorization 标头中:
CONNECT example.com:443 HTTP/2
Host: example.com
Proxy-Authorization: PrivateToken token=<base64-encoded-token>对于使用 Privacy Pass 的生产部署:
- 选择发行者。Cloudflare 可以运行令牌发行者,或者您也可以与第三方发行者集成。
- 配置证明以定义客户端在接收令牌之前如何证明其身份。
- 分发发行者配置。客户端需要发行者的公钥和端点来请求令牌。
联系我们 ↗为您的部署配置 Privacy Pass。
双向 TLS (mTLS) 身份验证 ↗确保流量在两个方向上都是安全且受信任的。客户端向代理出示证书,代理在允许连接之前对其进行验证。
客户端在 TLS 握手期间提供 TLS 客户端证书。代理根据配置的证书颁发机构 (CA) 验证证书,如果证书受信任,则允许连接。
您必须为每个客户端或服务配置和管理证书。mTLS 旨在用于服务器之间的通信,而不是用于验证单个用户。代理可以通过其证书识别客户端,与 Privacy Pass 相比,这降低了隐私性。
将 mTLS 用于双方都是受信任服务的服务器到服务器集成。
在双跳部署中,身份验证发生在两个层级:
代理 A(由您运营)验证用户身份。常用方法包括:
- 账户凭据(用户名/密码、SSO)
- 由您的基础设施发行的 Privacy Pass 令牌
- 客户端证书 (mTLS)
代理 B 使用 TLS 向代理 A 验证其身份。根据您的配置,这可以使用:
- 标准 TLS 证书
- 原始公钥 (RPK) TLS 扩展以减少证书开销
- Privacy Pass 工作组 ↗ - 开发 Privacy Pass 协议的 IETF 工作组。
- 支持最新版本的 Privacy Pass 协议 ↗ - 关于 Privacy Pass 实现的 Cloudflare 博客文章。