Помилка 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 має теги "Початок та Кінець", і він був скопійований саме з електронного листа з підтвердженням, який я отримав, дуже засмучує!

Ура!

Редагувати >> При спробі перевірити .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 як приклад

Чи можете ви, будь ласка, показати нам результат grep '^-----' domain.com.crt?
— кванта

Williamsowen, вся точка сертифіката повинна бути показана всім, хто підключається до вашого веб-сервера; це не приватна річ. З огляду на це, чи могли б ви приєднати тут або опублікувати весь сертифікат, щоб ми могли подивитися на нього безпосередньо, замість того, щоб гадати?
— MadHatter підтримує Моніку

Почекай, я бачу, ти щойно прийняв мою відповідь. Чи означає це, що проблему викликали термінальні канали Windows?
— MadHatter підтримує Моніку

MadHatter - вибачення! Нове в цьому, але я щойно працював, форматування електронного листа, яке я отримав, було вимкнено, я не міг подякувати вам, хлопці!
— williamsowen

Відповіді:


49

Чи можливо, що рядки закінчуються ^ М? Це потенційна проблема при переміщенні файлів з 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, і апаш їх не любить.

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


Редагувати : завдяки @ dave_thompson_085, який вказує, що ця відповідь більше не застосовується у 2019 році. Тобто Apache / OpenSSL тепер терпимо до ^ М-кінцевих ліній, тому вони не створюють проблем. Однак, інші помилки форматування, кілька різних прикладів яких з'являються в коментарях, все ще можуть викликати проблеми; уважно перевірте їх, якщо сертифікат переміщено в системах.


Для мене це була помилка копіювання та вставки, опускаючи перші пару символів заголовка -----BE... Дякую за натхнення, щоб перевірити ще раз!
— cfi

Спасибі, це була моя проблема! У блокноті ++ у вікнах ви можете використовувати діалогове вікно перетворення EDIT-EOL для зміни встановленого правильного формату LF. І ви можете скористатися меню «Переглянути-Показати символ», щоб фактично побачити закінчення рядків CR LF у вікні.
— Bjørn

1
Мій сертифікат просто виявився порожнім файлом. Щось зламалося в поколінні, я думаю. Ця відповідь спонукала мене відкрити її і побачити це.
— мерехтіння

Примітка для користувачів Windows: Можливо, вам потрібно буде конвертувати формат лінії в UNIX, навіть якщо ви працюєте в Windows. DOS2UNIX - це не команда Windows, а Linux. Хороша новина, Git для Windows надає це. CigWin, мабуть, теж робить, але не впевнений у цьому.
— Ігнасіо Сегура

Примітка для користувачів Windows: список дозволів на вкладці Властивості / безпека провідника Windows псується після копіювання файлу з обмеженими дозволами з мережевого спільного доступу з Cygwin's cp. Наприклад, я бачив "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 

Дякую за цю відповідь. Я зміг визначити формат, який мій СА надав як ".cer", анонімно
— javafueled"

10

У моєму випадку я виявив, що в моєму сертифікаті є різні символи. Повинна бути проблема копіювання / вставки адміністратора, який розмістив cert на сервері, а текстовий редактор замінив спеціальним символом unicode.

На діагностування знадобилося кілька годин, і врешті-решт я просто здогадався про це і відредагував cert in vi та видалив існуючі символи "-" і повторно ввів їх.

Сподіваюся, що це комусь допоможе.


8

У моєму випадку я зіткнувся з помилками ОП, оскільки той, хто створив .crt-файл для мене в першу чергу, справді створив файл формату .PEM і назвав його .crt.

Я виявив це, наткнувшись на наступний корисний посібник: https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificate-and-how -конвертувати-їх

все, що я повинен був зробити, це перейменувати свій .crt в .pem, і я закінчив! Посібник вказував, що помилки у питанні про ОП означають, що вхідний файл вже відформатований у форматі PEM, тому спроба перетворити його у .pem з формату DER неможливо, і насправді непотрібна.


4

Переконайтесь, що у вашому файлі немає проміжних чи провідних пробілів у файлі сертифіката Уважно переконайтесь, що у вашому файлі сертифікатів немає пробілів або пробілів, вибравши весь текст і шукаючи порожні пробіли в текстовому редакторі.

Також перевірте, чи дійсно всі налаштовані файли існують і чи є вони правильними.

Наприклад: в іншому дописі ви говорите, що ваш .key-файл називається моїм доменом.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
Також перевірте, чи ваші тире є тире. Мікрософтіанські текстові редактори люблять перетворюватися --на –; усунути неполадки це було не дуже цікаво.
— Шейн Мадден

Так, оскільки ви перебуваєте на Ubuntu, просто відкрийте термінал і, наприклад, використовуйте нано. Таким чином ви будете впевнені.
— Джордж Тасьоуліс

Привіт, дякую за вашу зворотну стрічку - я все перевірив і все добре. Я намагався перевірити файл 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) і експортував його як базовий код 64, кодований X.509 (.cer). Перейменував експортований файл на те саме ім’я (.crt) (використовується в моєму httpd-ssl.conf), і він знову працював! Той же сертифікат працював на моєму старому сервері, можливо, Apache 2.4 є більш суворим, ніж 2,2? Удачі.


0

У моєму випадку це стосується присутності BOM у файлі. Можна зняти його так:

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

Не впевнений, чи завжди це займає 3 байти, тому кращим способом має бути:

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

0

Я отримав таку ж помилку, тому що я перейшов .key з іменами .crt


0

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


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 або блокнота ++ у нано, завжди було щось схоже

sdgrgrgr rgregegreg rgrgreg
rgregreg rggregregr rgregrg

видаляючи порожні пробіли і пробираючи все в рядку, вирішили проблему Напр .:

sdgrgrgr
rgregegreg
rgrgreg
rgregreg
rggregregr
rgregrg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.