TLS 与 mTLS
AISIX AI 网关会在四个不同位置使用 TLS。请配置部署连接所涉及的每个区域。
| 连接 | 配置区域 | 用途 |
|---|---|---|
| 调用方到 AISIX | proxy.tls | 在代理监听器上终止 HTTPS |
| AISIX 到上游 | upstream.tls、provider_key.tls | 决定 AISIX 调用上游时信任哪些证书 |
| AISIX 到 etcd | etcd.tls | 验证 etcd 服务器并提供 AISIX 客户端身份 |
| AISIX 网关到控制面 | managed.* 证书包字段 | 向 AISIX Cloud 控制面认证 AISIX 网关 |
这些设置彼此独立。在代理监听器上启用 HTTPS 不会配置 etcd mTLS;信任上游的私有证书颁发机构不会影响 etcd;AISIX Cloud 证书包也不会替代监听器 TLS。
配置监听器 TLS
当 AISIX 需要直接在代理 监听器上终止 HTTPS 时,请使用监听器 TLS。
在代理监听器上配置 TLS:
proxy:
addr: "0.0.0.0:3000"
tls:
cert_file: "/etc/aisix/tls/proxy.crt"
key_file: "/etc/aisix/tls/proxy.key"
监听器 TLS 保护进入该监听器的入站流量,但不能证明 AISIX 可以连接 etcd、访问 AISIX Cloud 控制面或向上游模型服务提供方认证。
信任使用私有证书颁发机构的上游
AISIX 在请求路径上建立的每条连接——模型端点、安全护栏服务、MCP 和 A2A 上游、OIDC 发现与 JWKS 获取、Realtime WebSocket、Amazon Bedrock,以及日志导出对象存储——都会使用平台证书颁发机构进行验证。由自有证书颁发机构签发证书的自托管端点不在默认信任范围内,因此对它的请求会失败:
transport error: error sending request for url (https://internal-llm.example:8443/v1/chat/completions):
client error (Connect): invalid peer certificate: UnknownIssuer
将 upstream.tls.ca_file 指向该证书颁发机构的证书,可以为整个部署解决此问题:
upstream:
tls:
ca_file: "/etc/aisix/tls/private-ca.pem"
该文件使用 PEM 编码,可以包含多个证书,因此可在一个 bundle 中提供完整证书链。这些证书会在平台自带证书之外额外受信任,因此添加私有证书颁发机构不会导致公共模型服务提供方不可达。
如果 AISIX 无法读取该文件,或文件中不包含证书,启动会失败并在消息中指出路径,而不是等到每个请求建立连接时才失败。
提供客户端证书
部分上游还要求调用方使用证书进行身份认证。请同时设置以下两个字段:
upstream:
tls:
ca_file: "/etc/aisix/tls/private-ca.pem"
client_cert_file: "/etc/aisix/tls/client.crt"
client_key_file: "/etc/aisix/tls/client.key"
只设置其中一个字段会在启动时被拒绝。
为每个端点信任不同的证书颁发机构
如果部署面对多个私有证书颁发机构,请在携带端点的模型服务提供方密钥上声明信任,而不是在部署级统一声明。端点是在资源中声明的,因此证书以内联方式提供,而不是在网关配置文件中提供:
provider_keys:
- display_name: internal-llm
provider: openai
api_key: "sk-..."
api_base: "https://internal-llm.example:8443/v1"
tls:
ca_cert: |
-----BEGIN CERTIFICATE-----
MIIB...
-----END CERTIFICATE-----
在 AISIX Cloud 中,相同设置位于控制台中模型服务提供方密钥的 Endpoint TLS 部分。
在某个模型服务提供方密钥上配置的证书只适用于该密钥的端点。各密钥不会合并为一个信任存储,因此由不同证书颁发机构签发的两个端点需要分别配置。
在测试环 境中跳过验证
可以在部署级或单个模型服务提供方密钥上关闭证书验证:
upstream:
tls:
verify: false
这会接受受影响连接的任何证书,包括已过期证书、为其他主机签发的证书,以及拦截者提供的证书。任何能够拦截连接的人都可以读取和改写经过连接的提示词、响应和上游 API Key。在需要防范这些风险的环境中,请使用 ca_file 或 ca_cert。
Amazon Bedrock 不遵循此设置。 AWS SDK 的 HTTP 栈只公开信任根,因此无论 verify 如何设置,Bedrock 证书仍会被验证,并且也无法提供客户端证书。如果存在该设置,网关会在启动时记录警告,避免让它看起来已经生效。ca_file 适用于 Bedrock。
改用环境变量
AISIX 会采用 SSL_CERT_FILE 和 SSL_CERT_DIR,并将其添加到平台证书颁发机构之外。无需修改配置文件时,可以通过这种方式信任私有证书颁发机构。
这些变量作用于整个进程,因此无法表达“仅此端点信任此证书颁发机构”。这种场景应使用 upstream.tls.ca_file 和 provider_key.tls。
使用 update-ca-certificates 将证书安装到容器的系统信任存储不会生效。镜像以非特权 aisix 用户运行,因此该命令会因权限错误而失败,bundle 保持不变,网关仍会拒绝证书,但表面上看起来证书颁发机构已经安装。
配置 Redis 后端
共享缓存和限流后端使用独立的信任设置,因为它通常位于你的部署内部,且证书颁发机构与模型端点不同。其字段与 upstream.tls 相同,并且只适用于 rediss:// URL:
ratelimit:
backend: redis
redis:
mode: single
url: "rediss://redis.internal:6379"
tls:
ca_file: "/etc/aisix/tls/redis-ca.pem"
在 Sentinel 模式下,ca_file 不生效。客户端库不接受为其发现的主节点配置自定义信任根,因此请将证书放入系统信任存储,或改为通过 SSL_CERT_FILE 指定。该模式下设置 ca_file 时,网关会在启动时记录警告。verify 在 Sentinel 模式下仍然生效。