配置客户端和 APISIX Admin API 之间的 mTLS
双向 TLS (mTLS) 是一种双向 TLS,其中客户端和服务器相互验证身份。它通常用于防止未经授权的访问并加强安全性。
本文档将向你展示如何使用 Docker 化的 APISIX 配置客户端和 APISIX Admin API 之间的 mTLS。对于不同的部署方法,请相应调整步骤。
前置条件
生成证书和密钥
创建一个新目录并进入其中:
mkdir mtls-client-apisix && cd mtls-client-apisix
生成证书颁发机构 (CA) 密钥和证书:
openssl genrsa -out ca.key 2048 && \
openssl req -new -sha256 -key ca.key -out ca.csr -subj "/CN=ROOTCA" && \
openssl x509 -req -days 36500 -sha256 -extensions v3_ca -signkey ca.key -in ca.csr -out ca.crt
生成具有通用名称 admin.apisix.dev 的 APISIX Admin API 密钥和证书,并使用 CA 证书进行签名:
openssl genrsa -out admin.key 2048 && \
openssl req -new -sha256 -key admin.key -out admin.csr -subj "/CN=admin.apisix.dev" && \
openssl x509 -req -days 36500 -sha256 -extensions v3_req \
-CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial \
-in admin.csr -out admin.crt
生成具有通用名称 CLIENT 的客户端密钥和证书,并使用 CA 证书进行签名:
openssl genrsa -out client.key 2048 && \
openssl req -new -sha256 -key client.key -out client.csr -subj "/CN=CLIENT" && \
openssl x509 -req -days 36500 -sha256 -extensions v3_req \
-CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial \
-in client.csr -out client.crt
允许对目录中的文件进行读取访问,以避免下游权限问题:
chmod -R a+r ./
将证书和密钥复制到 /opt/mtls-client-apisix(或你选择的目录):
mkdir /opt/mtls-client-apisix
cp ca.crt admin.key admin.crt client.key client.crt /opt/mtls-client-apisix
配置 mTLS
你将在 Docker 容器中启动 APISIX,并带有 TLS 证书和密钥,以启用与客户端的 mTLS 通信。
启动 APISIX
在 /opt(或你选择的目录)中创建一个 APISIX 配置文件:
echo 'deployment:
role: traditional
role_traditional:
config_provider: etcd
admin:
admin_key_required: true
admin_key:
-
name: admin
key: Sup3rs3cretWr1teK3y # 替换为你的写密钥
role: admin
https_admin: true
admin_listen:
port: 9180
enable_http2: true
https_admin_cert: /usr/local/apisix/certs/admin.crt
https_admin_key: /usr/local/apisix/certs/admin.key
admin_mtls:
ca_cert: /usr/local/apisix/certs/ca.crt
' > /opt/config.yaml
在 Docker 中启动一个 APISIX 实例:
docker run -d \
--name apisix \
-p 9180:9180 \
// Annotate 1
-v /opt/mtls-client-apisix:/usr/local/apisix/certs \
// Annotate 2
-v /opt/config.yaml:/usr/local/apisix/conf/config.yaml \
apache/apisix
❶ 将主机上的 TLS 证书和密钥目录挂载到 Docker 容器。
❷ 将主机上的 APISIX 配置文件挂载到 Docker 容器。
验证 mTLS
要验证 APISIX 是否已启动且客户端和 APISIX Admin API 之间的 mTLS 已正确配置,请向 APISIX 发送请求以获取所有路由:
curl -ikv --resolve "admin.apisix.dev:9180:127.0.0.1" "https://admin.apisix.dev:9180/apisix/admin/routes" \
-H "X-API-KEY: Sup3rs3cretWr1teK3y" \
--cert /opt/mtls-client-apisix/client.crt --key /opt/mtls-client-apisix/client.key
如果一切正常,你应该看到包含所有 APISIX 路由的 HTTP/2 200 响应,例如:
{"list":[],"total":0}