规划证书吊销列表(CRL) - AWS Private Certificate Authority

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

规划证书吊销列表(CRL)

在将 CRL 配置为 CA 创建过程的一部分之前,可能需要事先进行一些设置。本节说明在创建附有 CRL 的 CA 之前应了解的先决条件和选项。

有关使用在线证书状态协议(OCSP)作为 CRL 的备选或补充的信息,请参阅 证书吊销选项为 AWS 私有 CA OCSP 配置自定义 URL

CRL 结构

每个 CRL 是一个 DER 编码文件。要下载文件并使用 OpenSSL 进行查看,请使用类似如下的命令:

openssl crl -inform DER -in path-to-crl-file -text -noout

CRL 采用以下格式:

Certificate Revocation List (CRL): Version 2 (0x1) Signature Algorithm: sha256WithRSAEncryption Issuer: /C=US/ST=WA/L=Seattle/O=Example Company CA/OU=Corporate/CN=www.example.com Last Update: Feb 26 19:28:25 2018 GMT Next Update: Feb 26 20:28:25 2019 GMT CRL extensions: X509v3 Authority Key Identifier: keyid:AA:6E:C1:8A:EC:2F:8F:21:BC:BE:80:3D:C5:65:93:79:99:E7:71:65 X509v3 CRL Number: 1519676905984 Revoked Certificates: Serial Number: E8CBD2BEDB122329F97706BCFEC990F8 Revocation Date: Feb 26 20:00:36 2018 GMT CRL entry extensions: X509v3 CRL Reason Code: Key Compromise Serial Number: F7D7A3FD88B82C6776483467BBF0B38C Revocation Date: Jan 30 21:21:31 2018 GMT CRL entry extensions: X509v3 CRL Reason Code: Key Compromise Signature Algorithm: sha256WithRSAEncryption 82:9a:40:76:86:a5:f5:4e:1e:43:e2:ea:83:ac:89:07:49:bf: c2:fd:45:7d:15:d0:76:fe:64:ce:7b:3d:bb:4c:a0:6c:4b:4f: 9e:1d:27:f8:69:5e:d1:93:5b:95:da:78:50:6d:a8:59:bb:6f: 49:9b:04:fa:38:f2:fc:4c:0d:97:ac:02:51:26:7d:3e:fe:a6: c6:83:34:b4:84:0b:5d:b1:c4:25:2f:66:0a:2e:30:f6:52:88: e8:d2:05:78:84:09:01:e8:9d:c2:9e:b5:83:bd:8a:3a:e4:94: 62:ed:92:e0:be:ea:d2:59:5b:c7:c3:61:35:dc:a9:98:9d:80: 1c:2a:f7:23:9b:fe:ad:6f:16:7e:22:09:9a:79:8f:44:69:89: 2a:78:ae:92:a4:32:46:8d:76:ee:68:25:63:5c:bd:41:a5:5a: 57:18:d7:71:35:85:5c:cd:20:28:c6:d5:59:88:47:c9:36:44: 53:55:28:4d:6b:f8:6a:00:eb:b4:62:de:15:56:c8:9c:45:d7: 83:83:07:21:84:b4:eb:0b:23:f2:61:dd:95:03:02:df:0d:0f: 97:32:e0:9d:38:de:7c:15:e4:36:66:7a:18:da:ce:a3:34:94: 58:a6:5d:5c:04:90:35:f1:8b:55:a9:3c:dd:72:a2:d7:5f:73: 5a:2c:88:85
注意

只有在颁发了引用它的证书时,CRL 才会存放到 Amazon S3 中。在此之前,Amazon S3 桶中只有显示一个 acm-pca-permission-test-key 文件。

Amazon S3 中 CRL 的访问策略

如果您计划创建 CRL,则需要准备一个 Amazon S3 存储桶来存储它。 AWS 私有 CA 自动将 CRL 存入您指定的 Amazon S3 存储桶中,并定期对其进行更新。有关更多信息,请参阅创建存储桶

您的 S3 桶必须通过附加的 IAM 权限策略进行保护。授权用户和服务主体需要 Put 权限才能允许 AWS 私有 CA 在桶中放置对象,并且需要 Get 权限才能进行检索。在创建 CA 的控制台过程中,您可以选择允许 AWS 私有 CA 创建新存储桶并应用默认权限策略。

注意

IAM 策略配置取决于 AWS 区域 所涉及的内容。区域分为两类:

  • 默认启用区域-默认情况下为所有区域启用的区域。 AWS 账户

  • 默认禁用的区域 – 默认情况下禁用但可以由客户手动启用的区域。

有关更多信息以及默认禁用的区域列表,请参阅管理。 AWS 区域有关在 IAM 上下文中对服务主体的讨论,请参阅选择加入区域的AWS 服务主体

将 CRL 配置为证书吊销方法时, AWS 私有 CA 会创建一个 CRL 并将其发布到 S3 存储桶。S3 存储桶需要一个允许 AWS 私有 CA 服务委托人写入存储桶的 IAM 策略。服务主体的名称因所使用的区域而有所不同,且并非支持所有可能性。

PCA S3 服务主体

两者位于同一区域

acm-pca.amazonaws.com

已启用

已启用

acm-pca.amazonaws.com

已禁用 已启用

acm-pca.Region.amazonaws.com

已启用 已禁用

不支持

默认策略对 CA 不施加任何 SourceArn 限制。我们建议您手动应用如下所示的宽松政策,该政策限制了对特定 AWS 账户和特定私有 CA 的访问权限。有关更多信息,请参阅使用 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:::DOC-EXAMPLE-BUCKET/*", "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition":{ "StringEquals":{ "aws:SourceAccount":"account", "aws:SourceArn":"arn:partition:acm-pca:region:account:certificate-authority/CA_ID" } } } ] }

如果您选择允许默认策略,以后可以随时修改

使用启用 S3 阻止公共访问 (BPA) CloudFront

默认情况下,新 Amazon S3 桶是在激活屏蔽公共访问权限(BPA)功能的情况下配置的。BPA 包含在 Amazon S3 安全最佳实践中,是一组访问控制,客户可以使用这些控制来微调对 S3 桶中对象和整个桶的访问权限。当 BPA 处于活动状态且配置正确时,只有经过授权和身份验证的 AWS 用户才能访问存储桶及其内容。

AWS 建议在所有 S3 存储桶上使用 BPA,以避免敏感信息泄露给潜在的对手。但是,如果您的 PKI 客户通过公共互联网(即未登录 AWS 账户)检索 CRL,则需要进行额外的规划。本节介绍如何使用 Amazon CloudFront(内容分发网络 (CDN))配置私有 PKI 解决方案,以便在不要求经过身份验证的客户端访问 S3 存储桶的情况下提供 CRL。

注意

使用 CloudFront 会给您的 AWS 账户带来额外费用。有关更多信息,请参阅 Amazon CloudFront 定价

如果您选择将 CRL 存储在启用 BPA 的 S3 存储桶中,但不使用 CloudFront,则必须构建另一个 CDN 解决方案,以确保您的 PKI 客户端可以访问您的 CRL。

使用 BPA 设置 Amazon S3

在 S3 中,像往常一样为您的 CRL 创建一个新桶,然后对其启用 BPA。

配置屏蔽对您的 CRL 的公共访问权限的 Amazon S3 桶
  1. 使用创建桶中的过程创建新 S3 桶。在此过程中,选择阻止所有公共访问选项。

    有关更多信息,请参阅阻止对您的 Amazon S3 存储的公共访问

  2. 创建桶后,从列表中选择其名称,导航至权限选项卡,在对象所有权部分选择编辑,然后选择存储桶拥有者优先

  3. 同样在权限选项卡上,向桶添加 IAM policy,如 Amazon S3 中 CRL 的访问策略 中所述。

为 BPA CloudFront 做好准备

创建一个可以访问您的私有 S3 存储桶并可以向未经身份验证的客户端提供 CRL 的 CloudFront 分配。

为 CR CloudFront L 配置发行版
  1. 使用《Amazon CloudFront 开发者指南》中创建分配中的步骤创建新 CloudFront 分配。

    完成该过程时,请应用以下设置:

    • 源域名中,选择您的 S3 桶。

    • 限制存储桶访问选择

    • 源访问身份选择创建新身份

    • 授予对存储桶的读取权限下选择是,更新存储桶策略

      注意

      在此过程中, CloudFront 修改您的存储桶策略以允许其访问存储桶对象。考虑编辑此策略,使其仅允许访问 crl 文件夹下的对象。

  2. 初始化发行版后,在 CloudFront 控制台中找到其域名并将其保存以供下一个步骤使用。

    注意

    如果您的 S3 存储桶是在 us-east-1 以外的区域新创建的,则当您通过访问已发布的应用程序时,可能会出现 HTTP 307 临时重定向错误。 CloudFront桶的地址可能需要几个小时才能传播。

为 BPA 设置 CA

在配置新 CA 时,请将别名添加到您的 CloudFront发行版中。

为你的 CA 配置别名记录 CloudFront
  • 使用 创建 CA 的过程(CLI) 创建您的 CA。

    执行该过程时,撤销文件revoke_config.txt应包含以下几行,以指定非公共 CRL 对象并在中提供分发端点的 URL: CloudFront

    "S3ObjectAcl":"BUCKET_OWNER_FULL_CONTROL", "CustomCname":"abcdef012345.cloudfront.net"

    之后,当您使用此 CA 颁发证书时,这些证书将包含如下所示的块:

    X509v3 CRL Distribution Points: Full Name: URI:http://abcdef012345.cloudfront.net/crl/01234567-89ab-cdef-0123-456789abcdef.crl
注意

如果您拥有由此 CA 颁发的较旧证书,则他们将无法访问 CRL。

加密 CRL

您可以选择在包含您的 CRL 的 Amazon S3 存储桶上配置加密。 AWS 私有 CA 对 Amazon S3 中的资产支持两种加密模式:

  • 使用 Amazon S3 托管的 AES-256 密钥自动进行服务器端加密。

  • 客户使用管理加密 AWS Key Management Service ,并根据您的规格 AWS KMS key 进行配置。

注意

AWS 私有 CA 不支持使用 S3 自动生成的默认 KMS 密钥。

以下过程介绍如何设置每个加密选项。

配置自动加密

完成以下步骤以启用 S3 服务器端加密。

  1. 打开 Amazon S3 控制台,网址为:https://console.aws.amazon.com/s3/

  2. Buckets 表中,选择用于存放您的 AWS 私有 CA 资产的存储桶。

  3. 在存储桶页面上,选择属性选项卡。

  4. 选择默认加密卡。

  5. 请选择 启用

  6. 选择 Amazon S3 密钥(SSE-S3)

  7. 选择保存更改

配置自定义加密

完成以下步骤以启用使用自定义密钥的加密。

  1. 打开 Amazon S3 控制台,网址为:https://console.aws.amazon.com/s3/

  2. Buckets 表中,选择用于存放您的 AWS 私有 CA 资产的存储桶。

  3. 在存储桶页面上,选择属性选项卡。

  4. 选择默认加密卡。

  5. 请选择 启用

  6. 选择AWS Key Management Service 密钥 (SSE-KMS)。

  7. 选择从 AWS KMS 密钥中选择输入 AWS KMS key ARN

  8. 选择保存更改

  9. (可选)如果您还没有 KMS 密钥,请使用以下 AWS CLI create-key 命令创建一个:

    $ aws kms create-key

    输出包含 KMS 密钥的密钥 ID 和 Amazon 资源名称(ARN)。下面是一个示例输出:

    { "KeyMetadata": { "KeyId": "01234567-89ab-cdef-0123-456789abcdef", "Description": "", "Enabled": true, "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1478910250.94, "Arn": "arn:aws:kms:us-west-2:123456789012:key/01234567-89ab-cdef-0123-456789abcdef", "AWSAccountId": "123456789012" } }
  10. 使用以下步骤,您可以向 AWS 私有 CA 服务主体授予使用 KMS 密钥的权限。默认情况下,所有 KMS 密钥均为私有;只有资源拥有者可以使用 KMS 密钥加密和解密数据。但是,资源拥有者可以将 KMS 密钥的访问权限授予其他用户和资源。该服务主体必须位于存储 KMS 密钥的相同区域内。

    1. 首先,policy.json使用以下get-key-policy命令保存 KMS 密钥的默认策略:

      $ aws kms get-key-policy --key-id key-id --policy-name default --output text > ./policy.json
    2. 在文本编辑器中打开 policy.json 文件。选择以下策略声明之一,并将其添加到现有策略中。

      如果您的 Amazon S3 桶密钥已启用,则请使用以下语句:

      { "Sid":"Allow ACM-PCA use of the key", "Effect":"Allow", "Principal":{ "Service":"acm-pca.amazonaws.com" }, "Action":[ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource":"*", "Condition":{ "StringLike":{ "kms:EncryptionContext:aws:s3:arn":"arn:aws:s3:::bucket-name" } } }

      如果您的 Amazon S3 桶密钥已禁用,则请使用以下语句:

      { "Sid":"Allow ACM-PCA use of the key", "Effect":"Allow", "Principal":{ "Service":"acm-pca.amazonaws.com" }, "Action":[ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource":"*", "Condition":{ "StringLike":{ "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::bucket-name/acm-pca-permission-test-key", "arn:aws:s3:::bucket-name/acm-pca-permission-test-key-private", "arn:aws:s3:::bucket-name/audit-report/*", "arn:aws:s3:::bucket-name/crl/*" ] } } }
    3. 最后,使用以下put-key-policy命令应用更新的策略:

      $ aws kms put-key-policy --key-id key_id --policy-name default --policy file://policy.json

确定 CRL 分发点 (CDP) URI

如果您使用 S3 存储桶作为 CA 的 CDP,则 CDP URI 可以采用以下格式之一。

  • http://DOC-EXAMPLE-BUCKET.s3.region-code.amazonaws.com/crl/CA-ID.crl

  • http://s3.region-code.amazonaws.com/DOC-EXAMPLE-BUCKET/crl/CA-ID.crl

如果您为自己的 CA 配置了自定义 CNAME,则 CDP URI 将包含别名记录,例如,http://alternative.example.com/crl/CA-ID.crl