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

  1. Отдельная сеть для резервных копий.

  2. Отдельная сеть для консольного доступа (они обычно теперь интегрируются на системной плате для основных серверов).

  3. Увеличенная пропускная способность (несколько сетей GB) связанный вместе.

37
задан 30 September 2011 в 14:03
16 ответов

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

Если каждая строка заканчивается на Control-M, например

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

, у вас есть файл в формате Windows с завершением строки, и apache не любит их.

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


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

49
ответ дан 28 November 2019 в 19:47

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

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

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

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

4
ответ дан 28 November 2019 в 19:47
>> 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 
11
ответ дан 28 November 2019 в 19:47

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

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

вместо:

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

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

17
ответ дан 28 November 2019 в 19:47

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

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

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

1
ответ дан 28 November 2019 в 19:47

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

openssl req -in server.csr -text -noout

vs

openssl x509 -in server.crt -text -noout
19
ответ дан 28 November 2019 в 19:47

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

На диагностику ушли часы, и в конце концов я просто угадали, отредактировали сертификат в vi, удалили существующие символы «-» и перепечатали их.

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

10
ответ дан 28 November 2019 в 19:47

В моем случае я столкнулся с ошибками 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 не может быть осуществлена ​​и фактически не нужна.

8
ответ дан 28 November 2019 в 19:47

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

0
ответ дан 28 November 2019 в 19:47

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

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

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

vi -c 'se nobomb' -c wq ssl.crt
0
ответ дан 28 November 2019 в 19:47

Получих същата грешка, защото смених .key с .crt имена на файлове

0
ответ дан 28 November 2019 в 19:47

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

0
ответ дан 28 November 2019 в 19:47

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

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

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

0
ответ дан 28 November 2019 в 19:47

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

0
ответ дан 28 November 2019 в 19:47

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

sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg

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

sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
0
ответ дан 28 November 2019 в 19:47

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

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

-----BEGIN CERTIFICATE-----
0
ответ дан 29 May 2020 в 12:04

Теги

Похожие вопросы