4562605504:ошибка:0909006C:PEM: получение_имени: отсутствие начальной строки:crypto/pem/pem_lib.c:745:Ожидается: ДОВЕРЕННЫЙ СЕРТИФИКАТ

Вопрос или проблема

Сертификат моего сайта только что истек, и я купил новый (бесплатный) на AliCloud, скачал один файл server.pem и один файл server.key.

Затем я использовал openssl x509 -outform der -in server.pem -out server.crt, чтобы создать файл server.crt. Однако openssl x509 -noout -text -in server.crt вернул мне ошибку:

unable to load certificate
4562605504:error:0909006C:PEM routines:get_name:no start line:crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE

Я также пробовал использовать server.crt в продакшене, но он просто не работал.

Кто-нибудь знает, как правильно сгенерировать файл .crt?

Вероятно, вам не стоит генерировать что-либо с этими командами openssl, а вместо этого следует использовать файл server.pem точно так, как вы его получили.

Откройте файл в текстовом редакторе. Если первая строка этого файла:

-----BEGIN CERTIFICATE-----

Тогда используйте его без изменений. Единственное, что возможно необходимо сделать — это добавить промежуточные сертификаты, в зависимости от вашего веб-сервера.

Я думаю, что вы не можете прочитать ваш файл server.crt из-за примененного шифрования (-outform der). Вы можете сгенерировать ваш файл crt без этой инструкции.
@see: https://superuser.com/a/1016068/1208395

Я пытался сделать обратную операцию и мне пришлось добавить -inform:

$ openssl x509 -in db-0.der -out db-0.pem -outform PEM
unable to load certificate
140120778442048:error:0909006C:PEM routines:get_name:no start line:../crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE

$ openssl x509 -in db-0.der -out db-0.pem -outform PEM -inform DER                                                                                                          
$ ls
db-0.der  db-0.pem  db.esl

Ответ или решение

Ошибка, которую вы наблюдаете, является проявлением того, как OpenSSL обрабатывает файлы сертификатов и ключей, и чаще всего связана с неправильным пониманием форматов файлов и их конверсией.

Теория

Когда мы говорим о сертификатах, важно понимать, что существуют два основных формата их хранения: PEM (Privacy Enhanced Mail) и DER (Distinguished Encoding Rules). Формат PEM — это текстовый формат, который используется для представления структур данных ASN.1 DER в формате Base64 и обычно сопровождается строками -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----. Формат DER является бинарным и не содержит таких строк. Для успешной работы OpenSSL важно, чтобы формат входного и выходного файлов был указан правильно.

Ошибка OpenSSL error:0909006C:PEM routines:get_name:no start line чаще всего указывает на то, что OpenSSL ожидал найти сертификат в формате PEM, но безуспешно искал начальную строку -----BEGIN CERTIFICATE-----, характерную для этого формата.

Пример

Вы загрузили файлы server.pem и server.key, которые предоставлены в формате PEM. При выполнении преобразования openssl x509 -outform der -in server.pem -out server.crt, вы пытались преобразовать сертификат из формата PEM в DER. Однако, кажется, что вы ожидали назад получить также что-то читаемое человеком или используемое в текстовом виде, что является ошибкой, поскольку DER — бинарный формат.

Применение

Основной вывод заключается в том, что, вероятно, вам нет необходимости вообще выполнять преобразование сертификата из PEM в DER, если сервер может работать с форматом PEM напрямую. Следуйте следующим шагам, чтобы удостовериться в правильности процесса:

  1. Проверка формата файла server.pem: Откройте server.pem в текстовом редакторе. Если он начинается с -----BEGIN CERTIFICATE-----, то это файл в формате PEM, и его можно использовать непосредственно.

  2. Настройка веб-сервера: Убедитесь, что ваш веб-сервер (например, Nginx или Apache) настроен на использование файла server.pem и соответствующего ему файла ключа server.key. Обычно для Nginx это будет выглядеть как:

    ssl_certificate     /path/to/server.pem;
    ssl_certificate_key /path/to/server.key;

    В Apache могут потребоваться дополнительные настройки и использование SSLCertificateChainFile для добавления промежуточных сертификатов, если они требуются.

  3. Проверка сертификата: Чтобы удостовериться в том, что ваш сертификат действителен и корректен, вы можете использовать команду openssl x509 -in server.pem -text -noout, чтобы просмотреть сам сертификат и убедиться в его корректности.

  4. Использование промежуточных сертификатов: Если ваш сертификат требует наличия цепочки промежуточных сертификатов, вам необходимо убедиться, что они добавлены в конец файла server.pem. Это необходимо для некоторых сертификационных центров и зависит от их требований.

  5. Перепроверка всех шагов: Сначала убедитесь, что все файлы правильны (то есть они не повреждены) и соответствуют формату. Если где-то пошли не так, такие шаги как повторный запрос/выпуск сертификатов могут помочь, но должны быть выполнены, только если вы знаете, что любые ранее использованные подходы не работают.

В идеале, если ваш сервер принимает PEM, используйте server.pem напрямую. Если же для каких-то операций требуется DER, полезно перепроверить соответствие форматов с самыми первыми строками: -inform PEM и -outform DER соответственно.

Следуя данным рекомендациям, вы должны избежать ошибок формата и настроить свой сервер для работы с новыми сертификатами без проблем. Если после выполнения всех шагов проблема сохраняется, возможно, стоит обратиться за помощью к службе поддержки вашего поставщика услуг сертификатов или изучить документацию вашего веб-сервера для детальной нотации.

Оцените материал
Добавить комментарий

Капча загружается...