如何解决 AWS CloudFront SSL 证书不存在的问题

Posted

技术标签:

【中文标题】如何解决 AWS CloudFront SSL 证书不存在的问题【英文标题】:How to solve AWS CloudFront SSL Certificate Doesn't Exist 【发布时间】:2021-08-08 21:23:02 【问题描述】:

当我在 CloudFormation 中将 IamCertificateId 属性添加到我的 AWS::CloudFront::Distribution 时,出现以下错误:

资源处理程序返回消息:“提供的请求无效:指定的 SSL 证书不存在、不在 us-east-1 区域、无效或不包含有效的证书链。”

我确实通过运行aws iam list-server-certificates command 并确保IamCertificateId 属性的值与证书的the ASCA prefixed IAM ID 匹配来确保证书存在。

我忽略了us-east-1 区域消息,因为 IAM 是一项全球服务并且我没有使用 ACM 证书。另外,我在中国cn-north-1 地区开展业务,以防万一。

我很确定证书是“有效的”,因为我假设如果证书格式不正确,AWS 不会允许我使用 upload the certificate with aws iam upload-server-certificate

因此,错误消息并未将我指向解决方案。我可能会错过什么?

【问题讨论】:

【参考方案1】:

您的证书可能有效,但可能对 CloudFront 无效。错误消息没有指出的是您可以在 the docs for uploading a certificate 中找到的内容:

注意: 如果您要上传专门用于 Amazon CloudFront 分配的服务器证书,则必须使用 path 参数指定路径。路径必须以 /cloudfront 开头,并且必须包含一个斜杠(例如 /cloudfront/test/ )。

因此,请确保在 aws iam upload-server-certificate 命令中添加 --path "/cloudfront/"

【讨论】:

我已经添加了路径"/cloudfront/",但是问题依旧存在。 Yann Stoneman,您是如何为云端分发生成私钥、证书主体和证书链的?我跟着this tutorial生成了三个文件。 @Brian -- 就我而言,我团队中的其他人给了我一个 PFX 编码的签名证书文件,然后我在 AWS 上按照这篇文章将它们转换为 AWS 可接受的格式:@987654323 @ 根据document,CloudFront 证书的长度不能超过 2048 位。我的证书是 4096 位,这就是我的问题的原因。【参考方案2】:

我遇到了这个问题,这是因为我的构建系统在 Windows 上意外切换了斜线 /(但它在 Linux 上运行)。我的 CloudFormation 文件有:

        "CloudfrontDistribution": 
            "Type": "AWS::CloudFront::Distribution",
            "DependsOn": "CloudfrontS3LogsBucket",
            "Condition": "DRDeactivated",
            "Properties": 
                "DistributionConfig": 
<--- snip snip -->
                    "ViewerCertificate": 
                        "AcmCertificateArn": "arn:aws:acm:us-east-1:0123456789:certificate\\XXXX-XXXX-XXXX-XXXX",
                        "SslSupportMethod": "sni-only",
                        "MinimumProtocolVersion": "TLSv1.2_2019"
                    
                
            
        
    ,

上面的 Cloud Formation 代码中的 AcmCertificateArn 错误。而不是

"AcmCertificateArn": "arn:aws:acm:us-east-1:0123456789:certificate\\XXXX-XXXX-XXXX-XXXX",

应该是:

"AcmCertificateArn": "arn:aws:acm:us-east-1:0123456789:certificate/XXXX-XXXX-XXXX-XXXX",

【讨论】:

以上是关于如何解决 AWS CloudFront SSL 证书不存在的问题的主要内容,如果未能解决你的问题,请参考以下文章

如果我在 Cloudfront 上启用了 SSL,AWS ALB 是不是需要 SSL?

CloudFront 分发和 AWS 颁发的证书提供 SSL_ERROR_NO_CYPHER_OVERLAP

使用 AWS CloudFront 使用 ssl-id 进行负载平衡

如何使用 AWS CDK 将域别名添加到现有 CloudFront 分配

使用 SSL 的 AWS 静态网站未正确路由

AWS Cloudfront 备用域名 403 被禁止