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

37

Я настраивал 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: ошибка: 0906D06C: процедуры PEM: PEM_read_bio: нет стартовой строки: pem_lib.c: 650: Ожидается: ДОВЕРЕННЫЙ СЕРТИФИКАТ
>> openssl x509 -text -inform DER -in domain.com.crt
невозможно загрузить сертификат
21325: ошибка: 0D0680A8: процедуры кодирования asn1: ASN1_CHECK_TLEN: неправильный тег: tasn_dec.c: 1316:
21325: ошибка: 0D07803A: процедуры кодирования asn1: ASN1_ITEM_EX_D2I: вложенная ошибка asn1: tasn_dec.c: 380: тип = X509

Редактировать >> (кстати, за помощь)

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

Просто по электронной почте компании, предоставляющей сертификат, они ответили>

Я проверил предоставленный вами файл CSR и могу убедиться, что он был сгенерирован правильно. Ошибка, с которой вы сейчас столкнулись, вызвана тем, что вы используете неверную командную строку для установки CSR. Вам нужно будет изменить этот domain.com.crt из командной строки, указав соответствующее имя вашего домена.

  • в настоящее время crt настроен на mysite.com.crt - я использовал domain.com.crt в качестве примера
williamsowen
источник
Не могли бы вы показать нам результат grep '^-----' domain.com.crt?
кванты
Williamsowen, весь смысл сертификата должен быть показан любому, кто подключается к вашему веб-серверу; это не личное дело Учитывая это, вы бы рассмотрели возможность прикрепления или публикации всего сертификата здесь, чтобы мы могли смотреть прямо на него, а не гадать?
MadHatter поддерживает Монику
Погоди, я вижу, ты только что принял мой ответ. Означает ли это, что именно терминальные переводы Windows вызывали проблему?
MadHatter поддерживает Монику
MadHatter - извинения! Новичок в этом, но у меня все получилось, форматирование из полученного мной письма было отключено, ребята, я не смог бы вас отблагодарить!
Уильямсовен

Ответы:

49

Возможно ли, что строки заканчиваются ^ 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-завершенными, поэтому они не вызывают проблем. Тем не менее, другие ошибки форматирования, несколько различных примеров которых появляются в комментариях, могут все еще вызывать проблемы; Тщательно проверьте их, если сертификат был перемещен по системам.

MadHatter поддерживает Монику
источник
Для меня это была ошибка копирования и вставки, в которой пропущены первые несколько символов заголовка -----BE... Спасибо за вдохновение для двойной проверки!
Cfi
Спасибо, это была моя проблема! В notepad ++ в Windows вы можете использовать диалоговое окно преобразования EDIT-EOL, чтобы изменить правильный формат LF. И вы можете использовать меню View-Show Symbol, чтобы фактически увидеть оконные линии CR LF.
Bjørn
1
Мой сертификат просто оказался пустым файлом. Что-то сломалось в поколении, я думаю. Этот ответ вдохновил меня открыть его и увидеть это.
flickerfly
Примечание для пользователей Windows: вам, вероятно, потребуется преобразовать формат строки в UNIX, даже если вы работаете в Windows. DOS2UNIX - это не команда Windows, а команда Linux. Хорошая новость, Git для Windows предоставляет это. CigWin, вероятно, тоже, но не уверен в этом.
Игнасио Сегура
Примечание для пользователей Windows: список разрешений на вкладке «Свойства / Безопасность» проводника Windows запутывается после копирования файла с ограниченными разрешениями из общего сетевого ресурса в cp Cygwin. Например, я видел «NUL SID», отключенные записи «Все» и «Пользователи домена».
угорь ghEEz
19

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

openssl req -in server.csr -text -noout

против

openssl x509 -in server.crt -text -noout
Мартейн де Миллиано
источник
17

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

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

вместо того:

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

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

Адриан Макнейл
источник
11
>> 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 
кванты
источник
Спасибо за этот ответ. Я смог определить формат, который мои SA предоставили, так как ".cer" уже были ".pem" incognito
javafueled
10

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

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

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

Скотт Дэйви
источник
8

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

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

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

Freya301
источник
4

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

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

Например: в другом сообщении вы говорите, что ваш файл .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

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

Джордж Тасиулис
источник
1
Также проверьте, что ваши тире являются тире. Microsoftian текстовые редакторы , такие как изменения --в ; это было не очень весело для устранения неполадок.
Шейн Мэдден
да, поскольку вы работаете в Ubuntu, просто откройте терминал и используйте, например, nano. Таким образом, вы будете уверены.
Джордж Тасиулис
Привет, спасибо за обратную связь - я проверил все и все хорошо. Я пытался проверить файл crt, однако я получаю:sudo 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
williamsowen
1
Первая строка вашего файла domain.com.crt начинается с -----BEGIN CERTIFICATE-----последней строки и заканчивается на -----END CERTIFICATE-----?
Джордж Тасиулис
1

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

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

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

мистифицировать
источник
0

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

удар
источник
0

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

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

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

vi -c 'se nobomb' -c wq ssl.crt
х-юри
источник
0

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

Тобия
источник
0

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

Uwe
источник
0

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

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

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

Дерек
источник
0

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

Джефф Хой
источник
0

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

sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg

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

sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
Teodor
источник