Помилка 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.