使用 AWS Certificate Manager 管理证书
AWS Certificate Manager(ACM)
证书颁发机构支持
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)
-
在变量中设置您的私有 CA ARN,以便于重用。
PCA_ARN="arn:aws:acm-pca:region:account:certificate-authority/12345678..." -
使用 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" -
将 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) -
使用 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 -
使用 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(源)”。