我正在尝试通过 aws cli 将一些 PEM 格式的 SSL 证书导入 AWS ACM。当尝试使用以下命令导入证书时,这些证书来自 nginx 安装:
aws acm import-certificate --certificate ssl.website.com.crt --private-key ssl.website.com.key --region us-east-2 --profile default
我收到此错误:
An error occurred (ValidationException) when calling the ImportCertificate operation: The certificate field contains more than one certificate. You can specify only one certificate in this field.
我不是 openssl 的专家,但据我所知,pem 文件上只有一个证书,只有一个 BEGIN/END CERTIFICATE 部分。我在这里找到了这个命令stackoverflow 帖子在 pem 文件上打印证书,但我在其输出中只看到一个证书:
openssl crl2pkcs7 -nocrl -certfile ssl.website.com.crt | openssl pkcs7 -print_certs -noout
subject=OU = Domain Control Validated, CN = website.com
issuer=C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", OU = http://certs.godaddy.com/repository/, CN = Go Daddy Secure Certificate Authority - G2
那么为什么 ACM 拒绝该证书?或者我(很可能)以错误的方式进行检查,并且该 pem 文件中确实有第二个证书?
答案1
解决了它,您必须在所有参数的值前面加上“file://”作为前缀,如下所示:
aws acm import-certificate --certificate file://ssl.website.com.crt --private-key file://ssl.website.com.key --certificate-chain file://ssl.website.com.ca --region us-east-2 --profile default
我关注本文件没有提到这一点。
答案2
就我而言,证书文件包含多个 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 部分 - 我需要使用第一个,后面的是证书链。
答案3
我遇到了同样的问题,最后得到了解决方案。
这是 AWS CLI 中的一个错误,因为证书是有效的。但是,就我而言,证书文件在每行末尾都有一个多余的空格(顺便说一句,我不知道为什么我们的证书颁发机构(在这种情况下是 Sectigo)会生成如此奇怪的证书)。删除这些多余的空格确实解决了这个问题。
这很简单:
$ perl -i -pe 's/ $//gm' certificate_file.crt