Вопрос или проблема
Сертификат моего сайта только что истек, и я купил новый (бесплатный) на 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 напрямую. Следуйте следующим шагам, чтобы удостовериться в правильности процесса:
-
Проверка формата файла
server.pem
: Откройтеserver.pem
в текстовом редакторе. Если он начинается с-----BEGIN CERTIFICATE-----
, то это файл в формате PEM, и его можно использовать непосредственно. -
Настройка веб-сервера: Убедитесь, что ваш веб-сервер (например, Nginx или Apache) настроен на использование файла
server.pem
и соответствующего ему файла ключаserver.key
. Обычно для Nginx это будет выглядеть как:ssl_certificate /path/to/server.pem; ssl_certificate_key /path/to/server.key;
В Apache могут потребоваться дополнительные настройки и использование
SSLCertificateChainFile
для добавления промежуточных сертификатов, если они требуются. -
Проверка сертификата: Чтобы удостовериться в том, что ваш сертификат действителен и корректен, вы можете использовать команду
openssl x509 -in server.pem -text -noout
, чтобы просмотреть сам сертификат и убедиться в его корректности. -
Использование промежуточных сертификатов: Если ваш сертификат требует наличия цепочки промежуточных сертификатов, вам необходимо убедиться, что они добавлены в конец файла
server.pem
. Это необходимо для некоторых сертификационных центров и зависит от их требований. -
Перепроверка всех шагов: Сначала убедитесь, что все файлы правильны (то есть они не повреждены) и соответствуют формату. Если где-то пошли не так, такие шаги как повторный запрос/выпуск сертификатов могут помочь, но должны быть выполнены, только если вы знаете, что любые ранее использованные подходы не работают.
В идеале, если ваш сервер принимает PEM, используйте server.pem
напрямую. Если же для каких-то операций требуется DER, полезно перепроверить соответствие форматов с самыми первыми строками: -inform PEM
и -outform DER
соответственно.
Следуя данным рекомендациям, вы должны избежать ошибок формата и настроить свой сервер для работы с новыми сертификатами без проблем. Если после выполнения всех шагов проблема сохраняется, возможно, стоит обратиться за помощью к службе поддержки вашего поставщика услуг сертификатов или изучить документацию вашего веб-сервера для детальной нотации.