上次更新日期:2020 年 10 月 5 日
我拥有 AWS Certificate Manager (ACM) 或 AWS Identity and Access Management (IAM) 上的 SSL 证书,我希望将该证书用于我的 Amazon CloudFront 分配。在设置分配时,我没有找到选择自定义 SSL 证书的选项。虽然我能将相同的证书用于我的负载均衡器,但却无法选择 SSL 证书。或者我收到了“InvalidViewerCertificate”错误消息。我应该如何排查此问题?
解决方法要排查与在 CloudFront 分配上使用自定义 SSL 证书有关的问题,请执行以下操作:
解决“InvalidViewerCertificate”错误
如果您在尝试创建或更新分配时收到了“InvalidViewerCertificate”错误,请参阅如何解决创建或更新 CloudFront 分配时的“InvalidViewerCertificate”错误?
如果您使用的是从 ACM 请求的证书或导入到 ACM 的证书,请确认您的证书是否符合要求
要将 ACM 证书指定到 CloudFront 分配,您必须在美国东部(弗吉尼亚北部)区域请求或导入证书。如果您使用的是 ACM 控制台,则在导航栏中选中区域选择器。确认在请求或导入证书前已经选择了美国东部(弗吉尼亚北部)。注意:在将 ACM 证书指定到 CloudFront 分配后,证书将分发到 CloudFront 分配的价格级别的所有边缘站点。 使用 DNS 验证或电子邮件验证功能验证您的 ACM 证书后,请确保证书的状态为已签发。证书状态必须为已签发,您才能将其指定到 CloudFront 分配。 证书必须为 2048 位或以下位数的 RSA 证书。尽管 ACM 支持 1024 位至 4096 位的 RSA 证书,但 CloudFront 等与 ACM 集成的服务仅支持最高 2048 位的 RSA 证书。 对于导入的证书,您必须确保该证书满足导入证书的先决条件。
如果您使用的是导入到 IAM 的证书,请验证 CloudFront 路径
在将 SSL 证书导入 IAM 时,您必须提供正确的路径,以便 CloudFront 可以使用该证书。运行以下 AWS 命令行界面 (AWS CLI) 命令以使指定的 CloudFront 路径上传您的证书:
注意:在运行此命令之前,请确保将所有值替换为您的证书和 CloudFront 分配的详细信息。
aws iam upload-server-certificate --server-certificate-name CertificateName
--certificate-body file://public_key_certificate_file --private-key file://privatekey.pem
--certificate-chain file://certificate_chain_file --path /cloudfront/DistributionName/
注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI。
如果您未使用 CloudFront 路径上传证书,请运行以下命令以使用该路径更新您的证书:
aws iam update-server-certificate --server-certificate-name CertificateName
--new-path /cloudfront/DistributionName/
注意:当您向 CloudFront 分配添加证书后,分配的状态将从已部署变为正在进行。将更改部署到所有 CloudFront 边缘站点时,分配的状态将重新变为已部署。典型的部署时间是 5 分钟。
确认您具有所需的权限
要将来自从 ACM 或 IAM 的证书指定到 CloudFront 分配,您用来指定证书的 IAM 用户或角色必须至少拥有以下权限:
{
"Version": "2012-10-17",
"Statement": ,
"Resource": "*"
},
{
"Effect": "Allow",
"Action": ,
"Resource": "arn:aws:cloudfront::account-id:distribution/distribution-id"
},
{
"Effect": "Allow",
"Action": "iam:ListServerCertificates",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": ,
"Resource": "arn:aws:iam::account-id:server-certificate/certificate-name-with-path"
}
]
}