如何使用 AWS 私有 CA 在应用程序负载均衡器上配置 mTLS?
我想向客户端颁发私有证书颁发机构(私有 CA),然后我可以使用它在应用程序负载均衡器上对 Mutual TLS (mTLS) 进行身份验证。
解决方法
按照以下步骤在 AWS 管理控制台中创建用于 mTLS 身份验证的私有 CA。
使用 HTTPS 侦听器创建应用程序负载均衡器
使用 AWS 私有 CA 创建根 CA 证书包
- 登录 AWS 管理控制台。
- 转到 AWS private Certificate Authority(AWS 私有证书颁发机构)。
- 选择 Create private CA(创建私有 CA)。选择 Root CA(根 CA),然后填写详细信息。将其余部分保留为默认值。选择 Private CA(私有 CA)。
- 选择 Actions(操作)。然后,选择 Install CA certificate(安装 CA 证书)。
- 选择 Expiry(到期时间),然后确认您的选择。然后,选择 Install(安装)。
使用 AWS 私有 CA 创建两个从属 CA
安装根 CA 后,再创建两个从属 CA。然后,使用这些 CA 颁发终端实体证书。
**注意:**您最多可以在应用程序负载均衡器上创建四个从属证书。有关 CA 层次结构的详细信息,请参阅设计 CA 层次结构。
创建从属 CA1
在 AWS 管理控制台上完成以下步骤:
- 转到 AWS private Certificate Authority(AWS 私有证书颁发机构),然后选择 Create private CA(创建私有 CA)。
- 选择 Subordinate CA(从属 CA),然后填写详细信息。选择 Create CA(创建 CA)。
**注意:**有关详细信息,请务必在字段中输入不同的 Subject Distinguished CA Name(主题专有 CA 名称)(例如,常用名称 (CN) SubCA1)。 - 选择 Actions(操作)。然后,选择 Install CA certificate(安装 CA 证书)。
- 选择 Root CA(根 CA)作为父 CA。
- 选择 Expiry(到期时间)并确认您的选择。然后,选择 Install(安装)。
**注意:**确保过期日期低于分配给根 CA 的到期日期。 - 将路径长度选择为 1 或 2 以添加更多从属证书。或者,根据您的用例将其保留为 0。
创建从属 CA2
完成以下步骤:
- 按照之前使用的步骤 1-3 创建 subordinate CA1(从属 CA1)。
- 选择 Subordinate CA1(从属 CA1)作为父 CA。
**注意:**在步骤 2 中,请务必在字段中输入不同的 Subject Distinguished CA Name(主题专有 CA 名称)(例如,常用名称 (CN) SubCA2)以了解详细信息。 - 指定 Expiry(到期时间)并确认。然后,选择 Install(安装)。
**注意:**确保到期日期低于分配给从属 CA1 的到期日期。
现在,您拥有签署 subordinate CA1(从属 CA1)(级别 2)的 Root CA(根 CA)(级别 1)。Subordinate CA1(从属 CA1)依次签署 subordinate CA2(从属 CA2)(级别 3)
**注意:**应用程序负载均衡器的最大证书链深度为四。
将证书包上传到 Amazon Simple Storage Service
在 AWS 管理控制台上完成以下步骤:
- 创建一个名为 CABundle.pem 的文件,然后从从属 CA2 复制证书链和证书正文。(证书链、按此顺序排列的证书正文)
- 使用所需策略创建 Amazon S3 存储桶。例如:
注意:将 <AccountID:certificate-authority/abcde-efgh-45dd-b564-1234abcd> 替换为您的账号和从属 CA2 的 Amazon 资源名称 (ARN)。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "acm-pca.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::<bucket-name>/*", "arn:aws:s3:::<bucket-name>" ], "Condition": { "StringEquals": { "aws:SourceAccount": "Your Acc Id", "aws:SourceArn": arn:aws:acm-pca:us-east-1:<AccountID>:certificate-authority/abcde-efgh-45dd-b564-1234abcd" } } } ] }
- 将 CABundle.pem 上传到您的 Amazon 3 存储桶。
创建信任库,然后将其与激活 mTLS 的侦听器相关联
使用私有 CA 颁发客户端证书
-
使用以下 AWS 命令行界面 (AWS CLI) 命令创建证书签名请求 (CSR):
openssl req -out client_csr1.pem -new -newkey rsa:2048 -nodes -keyout client_private-key1.pem
此命令返回 CSR 和私钥。
**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。 -
使用您刚刚创建的 AWS 私有 CA 颁发证书:
aws acm-pca issue-certificate \ --certificate-authority-arn arn:aws:acm-pca:us-east-1:679542158453:certificate-authority/c929c98e-f0e8-45dd-b564-e2bb5b121b88 \ --csr fileb://client_csr1.pem \ --signing-algorithm "SHA256WITHRSA" \ --validity Value=30,Type="DAYS"
此命令返回证书的 ARN。
-
颁发证书:
aws acm-pca get-certificate \ --certificate-authority-arn arn:aws:acm-pca:us-east-1:679542158453:certificate-authority/c929c98e-f0e8-45dd-b564-e2bb5b121b88 \ --certificate-arn arn:aws:acm-pca:us-east-1:679542158453:certificate-authority/c929c98e-f0e8-45dd-b564-e2bb5b121b88/certificate/add80c25606b48fcd3c4472ae0962125 | \ jq -r .'Certificate' > client_cert1.cert
测试 mTLS
传递您在请求中创建的客户端证书。如果该过程成功,即完成了双向身份验证。负载均衡器对客户端证书进行身份验证的同时,客户端对负载均衡器的证书进行身份验证。
curl -ivk --cert client_cert1.cert --key client_private-key1.pem https://<elb-name>
测试证书吊销
如果颁发的证书遭到泄露或不再需要,请使用证书吊销列表 (CRL) 吊销该证书。当您使用 AWS 私有 CA 时,您在激活 CRL 分配时会自动创建 .CRL 文件。
要在 AWS 管理控制台上激活 CRL 分配,请执行以下操作:
- 转到 subordinate CA2(从属 CA2)。
- 选择 Revocation configuration(撤销配置),然后选择 Activate CRL distribution(激活 CRL 分配)。
- 使用与之前相同的 S3 存储桶,然后选择 Create(创建)。如果您的 S3 存储桶策略设置正确,这将创建一个名为 acm-pca-permission-test-key-private 的测试文件。
吊销证书
要吊销证书,必须先获得已颁发证书的序列号。
-
要获取序列号,请使用以下 AWS CLI 命令:
openssl x509 -in client_cert1.cert -text -noout
-
发出 revoke certificate 命令
aws acm-pca revoke-certificate --certificate-authority-arn arn:aws:acm-pca:us-east-1:679542158453:certificate-authority/c929c98e-f0e8-45dd-b564-e2bb5b121b88 --certificate-serial ad:d8:0c:25:60:6b:48:fc:d3:c4:47:2a:e0:96:21:25 --revocation-reason "KEY_COMPROMISE"
此操作会在 S3 存储桶中创建 .CRL 文件。请注意,创建 .CRL 文件最多可能需要 30 分钟。
使用 CRL 文件更新信任库
转换文件格式
使用 AWS CLI 命令更改文件格式:
将 S3 存储桶中的 .CRL 转换为 .pem 格式。
**注意:**应用程序负载均衡器仅支持 .pem 格式的 CRL。
openssl crl -in revoked.crl -inform DER -out revoked_crl_in_pem.crl
更新信任库
完成以下步骤,以在 AWS 管理控制台中更新信任库:
- 登录 AWS 管理控制台。
- 转到 Trust store(信任库)。
- 转到 Certificate Revocation Lists(证书吊销列表)。选择 Add Revocation List(添加吊销列表)。
- 选择 **Browse S3(浏览 S3)。**然后,从您之前使用的 S3 存储桶中选择 .pem 格式的 .CRL 文件。
- 选择 Upload(上传)。
**注意:**重新运行 Test mTLS(测试 mTLS)步骤。请注意,mTLS 身份验证失败,因为您吊销了颁发的证书。
您也可以重复该步骤 Use the private CA to issue client certificates(使用私有 CA 颁发客户端证书)以颁发多个证书并验证 mTLS。
相关内容
- AWS 官方已更新 4 个月前
- AWS 官方已更新 5 个月前
- AWS 官方已更新 6 个月前
- AWS 官方已更新 1 年前