Ошибка SSL - невозможно прочитать сертификат сервера из файла

Я настраивал SSL для своего домена сегодня и столкнулся с другой проблемой - я надеялся, что кто-то сможет пролить свет на это..

Я продолжаю получать следующие сообщения об ошибках:

[ошибка] Init: невозможно прочитать сертификат сервера из файла /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt
[ошибка] Ошибка библиотеки SSL: 218529960 ошибка:0D0680A8: процедуры кодирования asn1:ASN1_CHECK_TLEN: неправильный тег
[ошибка] Ошибка библиотеки SSL: 218595386 ошибка:0D07803A: процедуры кодирования asn1:ASN1_ITEM_EX_D2I: вложенная ошибка asn1

Я использую Apache 2.2.16 и Ubuntu 10.10. Мой файл.crt имеет теги Begin и End и был скопирован именно из письма с подтверждением, которое я получил, очень расстраивает!

Ура!

Редактировать >> При попытке проверить.crt Это не похоже на работу:

>> openssl x509 -noout -text -in domain.com.crt 
невозможно загрузить сертификат
16851: ошибка: 0906D06C: процедуры PEM: PEM_read_bio: нет стартовой строки: pem_lib.c: 650: Ожидается: ДОВЕРЕННЫЙ СЕРТИФИКАТ

Также >>

>> openssl x509 -text -inform PEM -in domain.com.crt
невозможно загрузить сертификат
21321:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE
>> openssl x509 -text -inform DER -in domain.com.crt
невозможно загрузить сертификат
21325:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1316:
21325:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:380:Type=X509

Edit>> (Cheers for the help by the way)

>> grep '^-----' domain.com.crt
----- НАЧАТЬ СЕРТИФИКАТ -----
----- КОНЕЦ СЕРТИФИКАТА -----

Just emailed the company providing the Certificate, they responded>

I have checked the CSR file that you have provided and I can assure that this was correctly generated. The error that you are currently encountering is caused because you are using a wrong command line for installing the CSR. You will need to modify this domain.com.crt from your command line with the according name of your domain.

  • currently the crt is set up to mysite.com.crt - I've used domain.com.crt as an example

15 ответов

Возможно ли, что строки заканчиваются ^M? Это потенциальная проблема при перемещении файлов из Windows в системы UNIX. Один простой способ проверить это использовать vi в режиме "покажи мне бинарный", с vi -b /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt,

Если каждая строка заканчивается контрольной-M, как это

-----BEGIN CERTIFICATE-----^M
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM^M
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg^M
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x^M

у вас есть файл в формате строки с Windows, и Apache его не любит.

Ваши варианты включают перемещение файла снова, больше заботы; или используя dos2unix приказ раздеть их; Вы также можете удалить их внутри vi, если вы осторожны.


Редактирование: спасибо @dave_thompson_085, который указывает, что этот ответ больше не применяется в 2019 году. То есть Apache/OpenSSL теперь допускают строки с символом ^M, поэтому они не вызывают проблем. Тем не менее, другие ошибки форматирования, несколько различных примеров которых появляются в комментариях, могут все еще вызывать проблемы; Тщательно проверьте их, если сертификат был перемещен по системам.

Для тех, кто попадает на эту страницу с подобной ошибкой при попытке прочитать запрос на подпись сертификата (CSR) (обратите внимание, что OP читает сертификат): обязательно используйте правильную команду OpenSSL. x509 для сертификатов и req для КСО:

openssl req -in server.csr -text -noout

против

openssl x509 -in server.crt -text -noout
>> openssl x509 -noout -text -in domain.com.crt 
unable to load certificate
16851:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: TRUSTED CERTIFICATE

Я подозреваю, что у вас есть проблемы с форматом сертификата.

Запустите обе следующие команды и выдайте нам результат:

openssl x509 -text -inform DER -in domain.com.crt 
openssl x509 -text -inform PEM -in domain.com.crt 

Просто ходил кругами по этому вопросу, и оказалось, что у меня были сертификаты по неправильному пути - например,

SSLCertificateFile    /etc/apache2/ssl/server.key
SSLCertificateKeyFile /etc/apache2/ssl/server.crt

вместо:

SSLCertificateFile    /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key

Что-то, чтобы проверить, если вы получаете эту ошибку.

В моем случае я обнаружил, что в моем сертификате были разные символы "-". Должно быть, это была проблема копирования / вставки от администратора, который поместил сертификат на сервер, с заменой текстового редактора - специальным символом юникода.

Для диагностики потребовались часы, и в конце я только догадался об этом, отредактировал сертификат в vi, удалил существующие символы "-" и перепечатал их.

Надеюсь, это кому-нибудь поможет.

В моем случае я столкнулся с ошибками OP, потому что тот, кто создал для меня файл.crt, сначала создал файл в формате .PEM и назвал его.crt.

Я обнаружил это, наткнувшись на следующее полезное руководство: https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them

все, что мне нужно было сделать, это переименовать мой.crt в.pem, и все готово! В руководстве указывалось, что ошибки в вопросе OP подразумевают, что входной файл уже отформатирован в PEM, поэтому попытка преобразовать его в.pem из формата DER не может быть выполнена, и на самом деле в этом нет необходимости.

Убедитесь, что в вашем файле нет конечных или начальных пробелов в файле сертификата. Тщательно убедитесь, что в вашем файле сертификата нет пробелов или пробелов, выделив весь текст и ища пробелы в текстовом редакторе.

Также проверьте, действительно ли все настроенные файлы существуют и являются правильными.

Например: в другом сообщении вы говорите, что ваш файл.key называется my domain.com.crt, а в конфигурации vhost у вас есть domain.com.crt.

SSLCertificateFile /etc/apache2/domain.ssl/domain.ssl.crt/domain.com.crt
SSLCertificateKeyFile /etc/apache2/domain.ssl/domain.ssl.key/domain.com.key
SSLCertificateChainFile /etc/apache2/domain.ssl/ca.crt
SSLCACertificateFile /etc/apache2/domain.ssl/gs_intermediate_ca.crt

Проверьте еще раз, что все приведенные выше файлы действительно существуют и являются действительными.

В моем случае это связано с наличием спецификации в файле. Можно было бы раздеть это так:

tail -c +4 ssl.crt > ssl2.crt

Не уверен, что он всегда занимает 3 байта, поэтому лучший способ должен быть:

vi -c 'se nobomb' -c wq ssl.crt

Если кто-то еще столкнется с этой проблемой и ваши журналы ошибок apache скажут что-то вроде:

Init: невозможно прочитать сертификат сервера из файла /etc/apache2/domain.com.ssl/domain.com.crt/domain.com.crt

Убедитесь, что вы не поменяли местами файлы ключей и сертификатов в объявлениях в конфигурации Apache. Я указал ключ к моему файлу сертификата и сертификат к моему файлу ключа. Этот пост помог мне разобраться в проблеме, но я хотел указать на нее как на другую потенциальную проблему / решение.

У меня была эта проблема, потому что мне отправили содержимое файла.p7b в стиле IIS, вставленного в электронное письмо. Он имеет теги "-----BEGIN CERTIFICATE-----" и "-----END CERTIFICATE-----", как и.pem, а в контенте используется похожая кодировка base64. Я преобразовал его в файл *.pem примерно так:

openssl pkcs7 -print_certs -in cert.p7b -out cert.cer

После этого Apache 2.2 был счастлив.

В моем случае файл PEM содержал только ключ, а не сертификат.

Проверьте содержимое файла, он должен содержать строку

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

У меня недавно была эта проблема с использованием Lets Encrypt (letsencrypt) в Windows. Сертификат вернулся в кодировке UTF-16LE. Преобразование его в UTF-8 (с использованием dos2unix) решило проблему.

У меня была похожая проблема, когда я случайно использовал предоставленный клиентом сертификат IIS типа p7b в конфигурации apache. Преобразование сертификата в формат x509 исправило ошибку. Оба типа выглядят одинаково на поверхности, но, очевидно, отличаются внутри.

Я получил ту же ошибку, потому что я переключил.key с именами .crt

Моя проблема (с той же ошибкой при установке нового сервера с Apache 2.4) заключалась в том, что Apache (2.4) не мог прочитать двоичный файл.crt. Я импортировал его в свое личное хранилище сертификатов (с mmc) и экспортировал как X.509 (.cer) в кодировке base-64. Переименовал экспортированный файл в то же имя (.crt) (используется в моем httpd-ssl.conf), и он снова заработал! Тот же сертификат работал на моем старом сервере, может быть, Apache 2.4 более строгий, чем 2.2? Удачи.

В моем случае были просто пустые строки. Когда я вставлял файл crt из ntepad или notepad ++ в nano, всегда получалось что-то вроде

sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg

удаление пустых пространств и путиг все в одну линию решили проблему, например:

sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
Другие вопросы по тегам