Ошибка 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