在为 Amazon API Gateway API 配置相互传输层安全性协议(TLS)身份验证时,我想使用第三方颁发的客户端证书。
解决方法
要将第三方签名的客户端证书用于 API Gateway 和 TLS 身份验证,请执行以下步骤:
- 创建信任库以使用第三方签名证书。
- 为您的 API 网关 API 创建自定义域名和 API 映射。
- 创建 DNS 记录以将自定义域名映射到 API 网关。
- 禁用默认端点。
- 测试 API。
注意:
创建信任库以使用第三方签名证书
1. 生成 RootCA。RootCA 用于颁发客户端证书。
openssl genrsa -out RootCA.key 4096
openssl req -new -x509 -days 3650 -key RootCA.key -out RootCA.pem
2. 填写必填字段,然后输入域名。
3. 创建客户端证书私钥、证书签名请求 (CSR) 和客户端证书。
openssl genrsa -out my_client.key 2048
openssl req -new -key my_client.key -out my_client.csr
4. 使用您之前创建的 CA 对客户端证书进行签名。
openssl x509 -req -in my_client.csr -CA RootCA.pem -CAkey RootCA.key -set_serial 01 -out my_client.pem -days 3650 -sha256
5. 创建 Amazon Simple Storage Service (Amazon S3) 存储桶来存储 truststore.pem 文件。
6. 将 RootCA.pem 上传到 Amazon S3 存储桶信任库。
7. (可选)创建从中间 CA 证书到根 CA 的证书链文件。
Cat Intermediate.pem ca.pem >ca-chain.pem.
有关更多信息,请参阅配置您的信任库。
为您的 API 网关 API 创建自定义域名和 API 映射
**注意:**只有密钥大小为 2048 位的证书在 API Gateway 中可见。证书大小不能超过 2048 位。
1. 打开 API Gateway 控制台,然后选择自定义域名。
2. 对于域名,输入您的域名,然后选择创建。
3. 对于域名,输入您的域名。
4. 对于 TLS 最低版本,选择 TLS 1.2。
5. 启用双向 TLS 身份验证。
6. 对于 Truststore URI,请输入您之前创建的 Amazon S3 URI。
7. 对于端点配置,选择区域。
8. 对于证书类型,选择您的证书类型,然后选择创建域名。
9. 选择您的自定义域名,然后选择配置 API 映射。
10.选择添加新映射。
11.为映射选择 API、阶段和路径,然后选择保存。
有关更多信息,请参阅我如何为我的 API Gateway API 自定义域名?
创建 DNS 记录以将自定义域名映射到 API 网关
创建 DNS 记录以将自定义域名指向 API Gateway 区域域名。这允许将绑定到自定义域名的流量路由到 API 的区域主机名。DNS 记录可以是 CNAME 或 "A Alias" 类型。
有关更多信息,请参阅配置 Route 53 以将流量路由到 API 网关端点。
禁用默认端点
默认情况下,客户端可以使用 API Gateway 为 API 生成的 execute-api 端点来调用 API。禁用默认的 execute-api 端点,以便客户端只能使用自定义域名访问您的 API。
有关 HTTP API,请参阅禁用 HTTP API 的默认端点。
有关 REST API,请参阅禁用 REST API 的默认端点。
测试 API
使用 --key 和 --cert 参数测试 API,将客户端证书作为请求的一部分发送。
$ curl -v https://{YourCustomDomainName}/{resource} --key my_client.key --cert my_client.pem
**注意:**成功请求必须包含密钥 my_client.key 和客户端证书 my_client.pem。
相关信息
如何排查启用了自定义域和双向 TLS 的 Amazon API Gateway 的证书链和自签名证书问题?
为 Amazon API Gateway 引入双向 TLS 身份验证
如何排查来自需要双向 TLS 的 API Gateway 自定义域名的 HTTP 403 禁止访问错误?