使用 AWS Certificate Manager 管理证书 - Amazon CloudFront

使用 AWS Certificate Manager 管理证书

AWS Certificate Manager(ACM)存储 CloudFront 在双向 TLS(源)身份验证期间向原始服务器提供的客户端证书。

证书颁发机构支持

CloudFront 双向 TLS(源)需要具有扩展密钥用法(EKU)的客户端证书来进行 TLS 客户端身份验证。由于此要求,您必须从您的证书颁发机构颁发证书并将其导入到 AWS Certificate Manager 中。ACM 的自动证书预置和续订功能不适用于双向 TLS(源)客户端证书。CloudFront 双向 TLS(源)支持来自两个来源的客户端证书:

  • AWS 私有证书颁发机构:您可以使用在“扩展密钥用法”字段中包含 TLS 客户端身份验证的证书模板(例如 EndEntityClientAuthCertificate 模板)从 AWS 私有 CA 颁发证书。从 AWS 私有 CA 颁发证书后,您必须将其导入到美国东部(弗吉尼亚州北部)(us-east-1)中的 ACM。这种方法既可提供 AWS 私有 CA 的安全优势,又可让您控制证书生命周期管理。

  • 第三方私有证书颁发机构:也可以从现有的私有证书颁发机构基础设施颁发证书并将其导入到 ACM 中。这可让您在利用 CloudFront 的双向 TLS(源)功能的同时保留当前证书管理流程。证书必须在“扩展密钥用法”字段中包含 TLS 客户端身份验证,并且证书、私有密钥和证书链必须采用 PEM 格式。

重要

对于 AWS 私有 CA 和第三方 CA,您负责监控证书到期日期,并在到期前将续订的证书导入到 ACM 中。ACM 的自动续订功能不适用于双向 TLS(源)所用的导入证书。

证书要求和规范

客户端证书要求

  • 格式:PEM(隐私增强邮件)格式

  • 组件:证书、私有密钥和证书链

  • 最大证书链深度:3(叶证书 + 中间证书 + 根证书)

  • 最大证书链大小:64 KB

  • 证书大小:不能超过 96 KB

  • 最大私有密钥大小:5 KB(ACM 限制)

  • 每个 CloudFront 分配创建或更新 API 调用可以添加或修改的最大唯一源 mTLS 证书 ARN:5

  • 区域:证书必须存储在美国东部(弗吉尼亚州北部)区域(us-east-1)的 ACM 中

支持的证书规范

  • 证书类型:X.509v3

  • 公有密钥算法:

    • RSA:2048 位

    • ECDSA:P-256

  • 签名算法:

    • 采用 RSA 的 SHA256、SHA384、SHA512

    • 采用 ECDSA 的 SHA256、SHA384、SHA512

    • 采用 RSASSA-PSS 与 MGF1 的 SHA256、SHA384、SHA512

  • 扩展密钥用法(必需):证书要求将扩展密钥用法(EKU)扩展设置为 TLS 客户端身份验证,确保其被授权用于 mTLS 目的

服务器证书要求

在双向 TLS 握手期间,原始服务器必须提供来自公开信任的证书颁发机构的证书。有关原始服务器证书要求的完整详细信息,请参阅将 SSL/TLS 证书与 CloudFront 结合使用的要求

请求或导入证书

在启用双向 TLS(源)之前,您必须在 ACM 中拥有可用的客户端证书。

从 AWS 私有 CA 请求并导入证书

先决条件:

  • 在您的账户中配置的 AWS 私有证书颁发机构

  • 从 AWS 私有 CA 中颁发证书的权限

  • 将证书导入到 ACM 中的权限

  • 具有适合使用案例的 Extended key usage:TLS web client authentication证书模板 ARN

  • 安装 OpenSSL、AWS CLI 和 jq(用于解析 JSON)。

从 PCA 请求证书并导入到 ACM(AWS CLI)
  1. 在变量中设置您的私有 CA ARN,以便于重用。

    PCA_ARN="arn:aws:acm-pca:region:account:certificate-authority/12345678..."
  2. 使用 OpenSSL 生成 ECDSA P-256 私有密钥(prime256v1 曲线)和证书签名请求(CSR),确保使用 -nodes 标志按照 ACM 导入要求将私有密钥保持为未加密。

    openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -nodes \ -keyout private.key \ -out request.csr \ -subj "/CN=client.example.com"
  3. 将 CSR 提交给 AWS 私有 CA 以颁发证书,这会返回新颁发的证书的 ARN。

    CERT_ARN=$(aws acm-pca issue-certificate \ --certificate-authority-arn "$PCA_ARN" \ --csr fileb://request.csr \ --signing-algorithm "SHA256WITHECDSA" \ --validity Value=365,Type="DAYS" \ --template-arn arn:aws:acm-pca:::template/EndEntityCertificate/V1 \ --query 'CertificateArn' --output text)
  4. 使用 get-certificate 命令从 AWS PCA 检索证书捆绑包,该命令同时返回叶证书和链,然后使用 jq 将它们分成不同的文件。

    # Retrieve the full certificate bundle in JSON format aws acm-pca get-certificate \ --certificate-authority-arn "$PCA_ARN" \ --certificate-arn "$CERT_ARN" \ --output json > full_cert.json # Split into Leaf and Chain jq -r '.Certificate' full_cert.json > leaf_cert.pem jq -r '.CertificateChain' full_cert.json > cert_chain.pem
  5. 使用 fileb:// 协议在 CLI 中正确处理二进制文件数据,以便将未加密的私有密钥、叶证书和证书链导入到 AWS ACM 中。

    aws acm import-certificate \ --certificate fileb://leaf_cert.pem \ --private-key fileb://private.key \ --certificate-chain fileb://cert_chain.pem \ --region us-east-1 \ --query 'CertificateArn' \ --output text

从第三方 CA 导入证书

先决条件:

  • 来自证书颁发机构的采用 PEM 格式的证书、未加密的私有密钥和证书链

  • 证书必须包含用于 TLS 客户端身份验证的扩展密钥用法

  • 将证书导入到 ACM 中的权限

将证书导入到 ACM 中(AWS CLI)
aws acm import-certificate \ --certificate fileb://certificate.pem \ --private-key fileb://private-key.pem \ --certificate-chain fileb://certificate-chain.pem \ --region us-east-1 \ --query 'CertificateArn' \ --output text

后续步骤

在 ACM 中获取或导入客户端证书后,您可以将原始服务器配置为要求双向 TLS 身份验证,并在 CloudFront 分配上启用双向 TLS(源)。有关在 CloudFront 中启用双向 TLS(源)的说明,请参阅下一节“为 CloudFront 分配启用双向 TLS(源)”。