使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何使用 AWS 私有 CA 在应用程序负载均衡器上配置 mTLS?

3 分钟阅读
0

我想向客户端颁发私有证书颁发机构(私有 CA),然后我可以使用它在应用程序负载均衡器上对 Mutual TLS (mTLS) 进行身份验证。

解决方法

按照以下步骤在 AWS 管理控制台中创建用于 mTLS 身份验证的私有 CA。

使用 HTTPS 侦听器创建应用程序负载均衡器

为您的应用程序负载均衡器创建 HTTPS 侦听器

使用 AWS 私有 CA 创建根 CA 证书包

  1. 登录 AWS 管理控制台
  2. 转到 AWS private Certificate Authority(AWS 私有证书颁发机构)。
  3. 选择 Create private CA(创建私有 CA)。选择 Root CA(根 CA),然后填写详细信息。将其余部分保留为默认值。选择 Private CA(私有 CA)。
  4. 选择 Actions(操作)。然后,选择 Install CA certificate(安装 CA 证书)。
  5. 选择 Expiry(到期时间),然后确认您的选择。然后,选择 Install(安装)。

使用 AWS 私有 CA 创建两个从属 CA

安装根 CA 后,再创建两个从属 CA。然后,使用这些 CA 颁发终端实体证书。

**注意:**您最多可以在应用程序负载均衡器上创建四个从属证书。有关 CA 层次结构的详细信息,请参阅设计 CA 层次结构

创建从属 CA1

在 AWS 管理控制台上完成以下步骤:

  1. 转到 AWS private Certificate Authority(AWS 私有证书颁发机构),然后选择 Create private CA(创建私有 CA)。
  2. 选择 Subordinate CA(从属 CA),然后填写详细信息。选择 Create CA(创建 CA)。
    **注意:**有关详细信息,请务必在字段中输入不同的 Subject Distinguished CA Name(主题专有 CA 名称)(例如,常用名称 (CN) SubCA1)。
  3. 选择 Actions(操作)。然后,选择 Install CA certificate(安装 CA 证书)。
  4. 选择 Root CA(根 CA)作为父 CA。
  5. 选择 Expiry(到期时间)并确认您的选择。然后,选择 Install(安装)。
    **注意:**确保过期日期低于分配给根 CA 的到期日期。
  6. 将路径长度选择为 1 或 2 以添加更多从属证书。或者,根据您的用例将其保留为 0。

创建从属 CA2

完成以下步骤:

  1. 按照之前使用的步骤 1-3 创建 subordinate CA1(从属 CA1)。
  2. 选择 Subordinate CA1(从属 CA1)作为父 CA。
    **注意:**在步骤 2 中,请务必在字段中输入不同的 Subject Distinguished CA Name(主题专有 CA 名称)(例如,常用名称 (CN) SubCA2)以了解详细信息。
  3. 指定 Expiry(到期时间)并确认。然后,选择 Install(安装)。
    **注意:**确保到期日期低于分配给从属 CA1 的到期日期。

现在,您拥有签署 subordinate CA1(从属 CA1)(级别 2)的 Root CA(根 CA)(级别 1)。Subordinate CA1(从属 CA1)依次签署 subordinate CA2(从属 CA2)(级别 3)
**注意:**应用程序负载均衡器的最大证书链深度为四。

将证书包上传到 Amazon Simple Storage Service

在 AWS 管理控制台上完成以下步骤:

  1. 创建一个名为 CABundle.pem 的文件,然后从从属 CA2 复制证书链和证书正文。(证书链、按此顺序排列的证书正文)
  2. 使用所需策略创建 Amazon S3 存储桶。例如:
    {
        "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"
                    }
                }
            }
        ]
    }
    注意:将 <AccountID:certificate-authority/abcde-efgh-45dd-b564-1234abcd> 替换为您的账号和从属 CA2 的 Amazon 资源名称 (ARN)。
  3. CABundle.pem 上传到您的 Amazon 3 存储桶。

创建信任库,然后将其与激活 mTLS 的侦听器相关联

  1. 创建信任库
  2. 将信任库与应用程序负载均衡器上的 mTLS 侦听器相关联

使用私有 CA 颁发客户端证书

  1. 使用以下 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

  2. 使用您刚刚创建的 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。

  3. 颁发证书:

    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 分配,请执行以下操作:

  1. 转到 subordinate CA2(从属 CA2)。
  2. 选择 Revocation configuration(撤销配置),然后选择 Activate CRL distribution(激活 CRL 分配)。
  3. 使用与之前相同的 S3 存储桶,然后选择 Create(创建)。如果您的 S3 存储桶策略设置正确,这将创建一个名为 acm-pca-permission-test-key-private 的测试文件。

吊销证书

要吊销证书,必须先获得已颁发证书的序列号。

  1. 要获取序列号,请使用以下 AWS CLI 命令:

    openssl x509 -in   client_cert1.cert -text -noout  
  2. 发出 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 管理控制台中更新信任库:

  1. 登录 AWS 管理控制台
  2. 转到 Trust store(信任库)。
  3. 转到 Certificate Revocation Lists(证书吊销列表)。选择 Add Revocation List(添加吊销列表)。
  4. 选择 **Browse S3(浏览 S3)。**然后,从您之前使用的 S3 存储桶中选择 .pem 格式的 .CRL 文件。
  5. 选择 Upload(上传)。

**注意:**重新运行 Test mTLS(测试 mTLS)步骤。请注意,mTLS 身份验证失败,因为您吊销了颁发的证书。

您也可以重复该步骤 Use the private CA to issue client certificates(使用私有 CA 颁发客户端证书)以颁发多个证书并验证 mTLS。

AWS 官方
AWS 官方已更新 7 个月前