跳到主要内容
版本:3.19.0

配置上游 HTTPS

_TLS(传输层安全协议)_是一种用于保护双方通信的加密协议,例如 Web 浏览器与 Web 服务器之间的通信。如果 API 网关与上游服务之间的流量不被视为安全或私密,服务通常会要求使用 TLS。

APISIX 可以通过 HTTPS 加密上游流量。仅加密并不能证明上游可信;请启用证书验证,以检查证书链和主机名。

以下步骤将配置 APISIX 与上游服务之间的 HTTPS,然后启用证书链和主机名验证。


APISIX 与上游之间的 TLS

前置要求​

  • 安装 Docker。
  • 安装 cURL,用于向服务发送请求以进行验证。
  • 安装并运行 APISIX,或按照快速入门教程在 Docker 或 Kubernetes 中启动新的 APISIX 实例。

创建启用 TLS 的路由​

创建一条路由,连接示例上游 httpbin.org 的默认 HTTPS 端口 443:

curl -i "http://127.0.0.1:9180/apisix/admin/routes" -X PUT \
-H "X-API-KEY: ${ADMIN_API_KEY}" -d '
{
"id": "quickstart-tls-upstream",
"uri": "/ip",
"upstream": {
"scheme": "https",
"nodes": {
"httpbin.org:443": 1
},
"type": "roundrobin"
}
}'

测试 APISIX 与上游之间的 TLS​

向路由发送请求:

curl -i "http://127.0.0.1:9080/ip"

收到 HTTP/1.1 200 OK 响应,说明 APISIX 已成功通过 HTTPS 与上游服务建立连接并进行通信。

验证上游证书​

APISIX 可以通过各上游的 tls.ca_certs 列表或启动时加载的共享 CA 存储来信任上游证书。各上游的列表会替代该上游的共享存储。以下示例使用 Linux 镜像中常见的系统 CA 证书包作为共享存储。如果安装环境将证书包存储在其他位置,请先替换路径,再将这些设置合并到 config.yaml:

config.yaml
apisix:
ssl:
ssl_trusted_certificate: /etc/ssl/certs/ca-certificates.crt
nginx_config:
http_server_configuration_snippet: |
proxy_ssl_verify on;
proxy_ssl_verify_depth 5;

❶ ssl_trusted_certificate 会在 APISIX 启动时加载共享 CA 存储。

❷ proxy_ssl_verify 会为继承全局设置的 HTTPS 上游启用证书验证。

❸ proxy_ssl_verify_depth 设置证书链的最大深度。本示例允许五级。

重新加载 APISIX 以应用配置:

docker exec apisix-quickstart apisix reload

更新路由以验证证书,并使用证书覆盖的主机名:

curl "http://127.0.0.1:9180/apisix/admin/routes/quickstart-tls-upstream" \
-X PATCH -H "X-API-KEY: ${ADMIN_API_KEY}" \
-d '{
"upstream": {
"pass_host": "rewrite",
"upstream_host": "httpbin.org",
"tls": {
"verify": true
}
}
}'

❶ pass_host 和 upstream_host 使用 httpbin.org 作为上游 Host 请求头和 TLS 名称。

❷ tls.verify 为该上游启用验证。省略该字段时,上游会继承全局设置;将其设置为 false 会禁用验证。仅启用该字段并不会加载 CA 证书。

发送请求,验证启用证书验证后 APISIX 能否连接上游:

curl -i "http://127.0.0.1:9080/ip"

启用验证后仍成功收到响应,说明 TLS 握手通过了配置的信任链和主机名检查。如果证书不受信任或主机名不匹配,上游握手会失败;请求返回网关错误时,请检查 APISIX 错误日志。

后续步骤​

APISIX 还支持客户端与 APISIX 之间的 TLS 连接。请参阅配置客户端与 APISIX 之间的 HTTPS。