在客户端和 API7 网关之间配置 mTLS
双向 TLS (mTLS) 是传输层安全性 (TLS) 的一种增强形式,也是一种在客户端和服务器之间相互验证的方法。这是通过被称为“握手”的过程来实现的,在握手中,双方交换并验证证书以确认彼此的身份。
本指南将向你展示如何在客户端和 API7 网关之间配置 mTLS,从而防止未经授权的访问并加强安全性。
前置条件
- 安装 API7 企业版。
- 发布你的第一个 API,并确保你的服务具有主机名
test.com。
生成证书和密钥
-
生成证书颁发机构 (CA) 的密钥和证书:
openssl genrsa -out ca.key 2048openssl req -new -x509 -days 36500 -sha256 \-key ca.key \-out ca.crt \-subj "/CN=MyTestCA" \-extensions v3_ca \-config <(printf "[req]\ndistinguished_name=req\n[ v3_ca ]\nbasicConstraints=critical,CA:TRUE\nkeyUsage=critical,keyCertSign,cRLSign\nsubjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid:always,issuer") -
生成密钥和证书签名请求 (CSR):
openssl genrsa -out server.key 2048openssl req -new -sha256 \-key server.key \-out server.csr \-subj "/CN=test.com" -
使用 CA 证书签署服务器的 CSR,以生成服务器证书:
openssl x509 -req -days 36500 -sha256 \-in server.csr \-CA ca.crt -CAkey ca.key -CAcreateserial \-out server.crt \-extensions v3_req \-extfile <(printf "[v3_req]\nbasicConstraints=CA:FALSE\nkeyUsage=digitalSignature,keyEncipherment\nextendedKeyUsage=serverAuth") -
生成客户端的密钥和证书签名请求 (CSR):
openssl genrsa -out client.key 2048openssl req -new -sha256 \-key client.key \-out client.csr \-subj "/CN=CLIENT" -
使用 CA 证书签署客户端的 CSR,以生成客户端证书:
openssl x509 -req -days 36500 -sha256 \-in client.csr \-CA ca.crt -CAkey ca.key -CAcreateserial \-out client.crt \-extensions v3_req \-extfile <(printf "[v3_req]\nbasicConstraints=CA:FALSE\nkeyUsage=digitalSignature,keyEncipherment\nextendedKeyUsage=clientAuth")
上传证书
如果你希望引用来自密钥管理提供商的 SSL 证书, 请参阅引用 HashiCorp Vault 中的密钥、引用 AWS Secrets Manager 中的密钥或引用 Kubernetes Secret 中的密钥。
- Dashboard
- Ingress Controller
创建证书
- 从侧边导航栏选择你的网关组下的 证书,进入 SSL 证书 选项卡。
- 点击 新增 SSL 证书。
- 在弹出的对话框中,执行以下操作:
- 在 名称字段中,输入
Test SSL Certificate。 - 在 证书字段中,上传
server.crt文件。 - 在 私钥字段中,上传
server.key文件。 - 点击 新增。
- 从侧边导航栏选择你的网关组下的 证书,然后点击 CA 证书选项卡。
- 点击 新增 CA 证书。
- 在弹出的对话框中,执行以下操作:
- 在 名称字段中,输入
Test CA Certificate。