Я пытаюсь импортировать некоторые сертификаты ssl в формате PEM в AWS ACM через aws cli.Сертификаты поступают из установки 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, но AFAICS в 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-файле действительно есть второй сертификат?
Решено, вы должны добавить к значению всех параметров префикс '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
Я следил за этой документацией, в которой это не упоминается.
Это указано в документации. Может быть, вы пропустили это.
При импорте сертификата с помощью интерфейса командной строки необходимо указать сертификат, цепочку сертификатов и закрытый ключ в именах файлов, которым предшествует fileb:// . Например, вы можете указать сертификат, сохраненный в папке C:\temp, как файл b://C:\temp\certificate_to_import.pem . Если вы делаете запрос HTTP или HTTPS Query, включите эти аргументы в виде больших двоичных объектов.
У меня была такая же проблема, и наконец я нашел решение.
Это ошибка интерфейса командной строки AWS, поскольку сертификат действителен. Однако в моем случае файл сертификата имел лишний пробел в конце каждой строки (Я не знаю, почему наш центр сертификации -Sectigo в этом случае -кстати генерировал такие странные сертификаты). ]. Удаление этого дополнительного пространства решило проблему.
Это так же просто, как:
$ perl -i -pe 's/ $//gm' certificate_file.crt