通过运行good ole
创建CSR$ openssl req -nodes -newkey rsa:4096 -keyout example.key -out example.csr
这产生了一个例子。CSR和example.key
然后,我把它签了名,收到了4个。crt文件。我的域名。crt, 2个中间文件,和根文件。
从这个:http://docs.aws.amazon.com/IAM/latest/APIReference/API_UploadServerCertificate.html,我收集到Amazon希望我的私钥是PEM编码的,所以我运行
$ openssl rsa -in example.key -text > example.pem
Cloudfront也想要他们所谓的CertificateChain,从https://bryce.fisher-fleig.org/blog/setting-up-ssl-on-aws-cloudfront-and-s3/和http://docs.aws.amazon.com/IAM/latest/UserGuide/InstallCert.html#SampleCert,似乎该文件应该是2个中间证书连接在一起。我用文本编辑器创建了这个文件命名为example。crt。chain
最后,有了这些,我跑了
$ aws iam upload-server-certificate --server-certificate-name star-assets-example-com --certificate-body file://STAR_assets_example_com.crt --private-key file://example.pem --certificate-chain file://example.crt.chain --path /cloudfront/assets/
返回给我的"ServerCertificateMetadata"。最后,我转到Cloudfront控制台,并尝试将该证书设置为Cloudfront的"自定义SSL证书"。但是,它告诉我
AWS Error Code: InvalidViewerCertificate, AWS Error Message: The specified SSL certificate doesn't exist in the IAM certificate store, isn't valid, or doesn't include a valid certificate chain.
修改我已经试过了
- 包括和不包括链中的根证书。都上传,但都不工作。
- 我已经尝试从我的PEM文件的头部删除"模数","privateExponent","prime1"等,以便它只包含"-----BEGIN RSA私钥-----…-----END RSA PRIVATE KEY-----"之类的东西,就像AWS文章建议的那样。都上传,但都不工作。
- 更改我的链文件中的证书顺序会导致上传工具出现无效错误。
- 不包括证书链,但这显然违背了cloudfront说我需要的。
- 使用我原来的例子。替换
openssl rsa
编码的PEM文件。这会从上传工具中产生错误。该文件的格式为"-----BEGIN PRIVATE KEY-----…"----- end私钥-----"
所以事实证明,我的错误只是我的证书大小太长。最大长度是2048,而我的是4096!我发现我的问题是通过阅读类似的问题在这里有问题关联SSL证书与亚马逊Cloudfront
我想这就是晦涩的"无效"的意思。我真的希望有更多的验证和更好的错误消息!!!!
我也得到了这个错误,但是事实证明我也需要从发行者上传证书链。下面是我运行的最后一个命令:
aws iam upload-server-certificate --server-certificate-name <name> --certificate-body file://domain.crt --private-key file://domain.key --certificate-chain file://issuer.cer --path /cloudfront/
也得到了这个错误,并花了更多的时间比我想试图找出为什么它失败(密钥大小超过2048,证书链等)。
在通过Terraform(指定iam_certificate_id)创建分发时,我试图使用IAM证书。在查看了用于创建发行版的AWS web界面后,没有输入IAM证书Id的选项,而且它似乎只允许ACM证书。是否曾经存在对IAM证书的支持(如Terraform aws_cloudfront_distribution包含它),但现在已被删除(因为在AWS控制台不可用)?
当使用ACM证书而不是IAM证书时,它对我来说工作得很好