SSL: помилка: 0B080074: підпрограми сертифіката x509: X509_check_private_key: невідповідність значень ключів


99

Я не можу налаштувати SSL. Я погуглив і знайшов кілька рішень, але жодне з них не працювало для мене. Мені потрібна допомога, будь ласка ...

Ось помилка, яку я отримую при спробі перезапустити nginx:

root@s17925268:~# service nginx restart
Restarting nginx: nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/conf.d/ssl/ssl.key") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
nginx: configuration file /etc/nginx/nginx.conf test failed

Мій сертифікат надійшов від StartSSL і діє 1 рік.

Ось те, що я перевірив:

  • Сертифікат і закритий ключ не мають пробілів.
  • Я не використовую файл server.key за замовчуванням.
  • Я перевірив nginx.conf, і директиви вказують на правильний закритий ключ та сертифікат.

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

Дякую за твою допомогу. :)

Відповіді:


36

Я отримав хеш MD5 з різними результатами як для ключа, так і для сертифіката.

Це все говорить. У вас є невідповідність між ключем та сертифікатом.

Модуль повинен збігатися. Переконайтесь, що у вас є правильний ключ.


Якщо я чогось не пропускаю, ви абсолютно ХОЧЕТЕ, щоб відкритий та приватний ключі (файл сертифіката та файл ключів) відрізнялися.
Марк Беррі

1
У modulus' and the частині громадського Експонента в ключі і сертифікаті повинні збігатися. Без сумніву, файли різні. Ключ генерується для одного конкретного сертифіката.
dev0z

Моє ліжко. Я думав, він мав на увазі MD5 файлів. Зараз я бачу, що сертифікати мають окрему функцію модуля: Як підтвердити, що модуль у вашому приватному ключі відповідає модулю у відкритому ключі вашого сертифіката SSL / TLS до встановлення? .
Mark Berry

165

Як тільки ви встановили, що вони не збігаються, у вас все ще є проблема - що з цим робити. Часто сертифікат може бути просто зібраний неправильно. Коли центр сертифікації підписує ваш сертифікат, вони надсилають вам блок, що виглядає приблизно так

-----BEGIN CERTIFICATE-----
MIIAA-and-a-buncha-nonsense-that-is-your-certificate
-and-a-buncha-nonsense-that-is-your-certificate-and-
a-buncha-nonsense-that-is-your-certificate-and-a-bun
cha-nonsense-that-is-your-certificate-and-a-buncha-n
onsense-that-is-your-certificate-AA+
-----END CERTIFICATE-----

вони також надішлють вам пакет (часто два сертифікати), який представляє їх повноваження надати вам сертифікат. це буде виглядати приблизно так

-----BEGIN CERTIFICATE-----
MIICC-this-is-the-certificate-that-signed-your-request
-this-is-the-certificate-that-signed-your-request-this
-is-the-certificate-that-signed-your-request-this-is-t
he-certificate-that-signed-your-request-this-is-the-ce
rtificate-that-signed-your-request-A
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICC-this-is-the-certificate-that-signed-for-that-one
-this-is-the-certificate-that-signed-for-that-one-this
-is-the-certificate-that-signed-for-that-one-this-is-t
he-certificate-that-signed-for-that-one-this-is-the-ce
rtificate-that-signed-for-that-one-this-is-the-certifi
cate-that-signed-for-that-one-AA
-----END CERTIFICATE-----

крім того, що, на жаль, вони не будуть так чітко позначені.

то звичайною практикою є об’єднання їх у один файл - ваш сертифікат, а потім сертифікати підписання. Але оскільки їх не легко розрізнити, іноді трапляється, що хтось випадково розміщує їх в іншому порядку - підписує сертифікати, а потім остаточний сертифікат - не помічаючи. У цьому випадку ваш сертифікат не буде відповідати вашому ключу.

Ви можете протестувати, щоб побачити, що сертифікат думає, що він представляє, запустивши

openssl x509 -noout -text -in yourcert.cert

Угорі ви повинні побачити "Тема:", а потім речі, схожі на ваші дані. Якщо натомість це схоже на ваш CA, ваш пакет, ймовірно, знаходиться в неправильному порядку; ви можете спробувати зробити резервну копію, а потім перенести останній сертифікат на початок, сподіваючись, що саме той є вашим сертифікатом.

Якщо це не спрацює, можливо, вам доведеться просто перезапустити сертифікат. Коли я роблю CSR, я люблю чітко позначати, для якого сервера він призначений (а не просто ssl.key або server.key), і роблю його копію з датою в назві, наприклад mydomain.20150306.key тощо. ці пари приватних та відкритих ключів навряд чи змішаться з іншим набором.


1
Це виправило це для мене на Nginx!
TTT

24
Величезний +1 за те, як показати, як побачити, що в ланцюжку сертифікатів.
cbednarski

Безумовно корисно, я витрачаю одну годину, намагаючись зрозуміти, чому nginx відмовляв у сертифікаті, хоча я бачив, що він містить дані
Якопофар

3
Гаразд, це також працювало для мене з сертифікатом Comodo та Ngix. Просто штовхнув останній блок сертифіката до верху. Thx за детальне пояснення та розуміння цього питання.
Andy D

1
Мені це допомагає! Дуже корисна відповідь! Дуже дякую!
Олег Клименко

70
  1. Переконайтеся, що ваш сертифікат та ключ мають формат PEM. Якщо ні, то перетворіть їх за допомогою команди openssl
  2. Перевірте хеш відкритого ключа MD5, щоб переконатися, що він збігається з тим, що є в закритому ключі

    openssl x509 -noout -modulus -in certificate.crt | openssl md5
    openssl rsa -noout -modulus -in privateKey.key | openssl md5
    

7
Хороша порада ! Ну, все одно отримуй ту саму помилку, навіть якщо хеш md5 для мене однаковий ^^
Дельфіна

4
Дякуємо, що вказали, як перевірити хеші. Я виявив, що у мене сталася помилка копіювання та мені не вистачало жодної риски з самого початку мого пему. Ви просто врятували мені багато головних болів. Ура.
Джастін Фортьє,

38

У мене була ця проблема, оскільки я додавав пакет та сертифікат у неправильному порядку, тож, можливо, це могло допомогти комусь іншому.

До (що неправильно):

cat ca_bundle.crt certificate.crt > bundle_chained.crt

Після (що правильно)

cat certificate.crt ca_bundle.crt > bundle_chained.crt

І, будь ласка, не забудьте оновити відповідний conf (ssl_certificate тепер повинен вказувати на ланцюжок crt) як

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     bundle_chained.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

Зі сторінки керівництва nginx :

Якщо сертифікат сервера та пакет були об'єднані в неправильному порядку, nginx не зможе запуститись і відобразить повідомлення про помилку:

SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed
   (SSL: error:0B080074:x509 certificate routines:
    X509_check_private_key:key values mismatch)

3
Це насправді краща відповідь на це запитання, ніж прийняте.
лисини

9

Якщо це сталося, і ви використовуєте Let's Encrypt / certbot, причина, швидше за все, те, що ви використали chain.pemзамість fullchain.pem.

Це має бути приблизно так:

ssl_certificate /etc/certbot/live/example.com/fullchain.pem;
ssl_certificate_key /etc/certbot/live/example.com/privkey.pem;

Див. Документи certbot “Де знаходяться мої сертифікати?”


Або порядок сертифікатів у наборі неправильний: спочатку letsencrypt, потім власний сертифікат.
інгопінго

5

У мене була та сама проблема, і нарешті її вирішили, змінивши порядок блоків pem у файлі сертифіката.

Блок сертифіката слід розмістити на початку файлу, потім проміжні блоки, потім кореневий блок.

Я зрозумів цю проблему, порівнявши проблемний файл сертифіката з діючим файлом сертифіката.


1

Мої 5 центів з цього питання:

У мене була така сама проблема. Приблизно через 1 годину догляду за ним я виявив, що неправильно вставив сертифікат.

Якщо у вас є така помилка, перевірте свій сертифікат.


1

У моєму випадку я хотів змінити сертифікат SSL, оскільки я змінив свій сервер, тому мені довелося створити новий CSR за допомогою цієї команди:

 openssl req -new -newkey rsa:2048 -nodes -keyout mysite.key -out mysite.csr

Я надіслав файл mysite.csr постачальнику SSL компанії, і після того, як отримав сертифікат crt, а потім перезапустив nginx, і з'явилася ця помилка

 (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)

Після довгих досліджень помилка полягала в тому, що модуль із файлу ключа не збігався з модулем із файлу crt

Отже, для того, щоб це працювало, я створив новий файл CSR, але мені потрібно змінити ім'я файлу за допомогою цієї команди

 openssl req -new -newkey rsa:2048 -nodes -keyout mysite_new.key -out mysite_new.csr

Тоді я отримав новий файл crt від постачальника компанії, перезапустіть nginx, і він запрацював.


0

Це також може трапитися, коли ваш ЦС видає проміжний сертифікат

Я зіткнувся з цією проблемою (двічі) з nginx, і жодне з рішень у цій публікації не пояснило проблему. Допис у блозі тут приємного джентльмена на ім’я Марко прибив, і я вставляю його сюди для всіх, хто також стикається з тим, що я бачив. https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

У моєму випадку go-daddy був CA, і це особливо залежить від того, як вони видають сертифікат та проміжні пакети сертифікатів.

Ось уривок із допису Марка в блозі

Якщо в Nginx ваш центр сертифікації включав проміжний сертифікат, ви повинні створити єдиний ланцюговий файл сертифіката, який містить ваш сертифікат та проміжні сертифікати центру сертифікації.

За допомогою цієї команди можна створити комбінований файл example.com.chained.crt:

cat example.com.crt intermediate.crt > example.com.chained.crt


0

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

 sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

0

Це трапилося зі мною, коли я поєднав bundle.crt та основний сертифікат. Причиною було те, що я скопіював основний сертифікат нижче bundle.crt. Має бути навпаки

1 / основний сертифікат 2 / bundle.crt


0

Для Nginx:

  1. openssl req -newkey rsa:2048 -nodes -keyout domain.com.key -out domain.com.csr

  2. SSL-файл domain_com.crtі domain_com.ca-bundleфайли, а потім скопіюйте новий файл в пасту domain.com.chained.crt.

3: Додайте файли nginx:

  1. ssl_certificate /home/user/domain_ssl/domain.com.chained.crt;
  2. ssl_certificate_key /home/user/domain_ssl/domain.com.key;

Пізніше перезапустіть Nginx.


0

Помилка SL_CTX_use_PrivateKey ("/ etc / nginx / ssl / file") (SSL: помилка: 0B080074: підпрограми сертифіката x509: X509_check_private_key: невідповідність значень ключів)

Ця помилка може статися, коли приватний ключ сертифіката ( ssl_certificate_keyнаприклад, .keyабо .pemфайл) не відповідає відкритому файлу сертифіката ( ssl_certificate) у вашій конфігурації Nginx (реєстрація nginx.confчи реєстрація sites-enabled/). Переконайтеся, що обидва файли відповідають.

Перегляньте журнали помилок Nginx для отримання детальної інформації (наприклад /var/log/nginx/error.log).


0

У моєму випадку я повинен об'єднати сертифікати свого домену.

cat myDomain.crt EntityCertCA.crt TrustedRoot.crt > bundle.crt

А у конфігураційному файлі /etc/nginx/nginx.conf

 ssl_certificate "/etc/pki/nginx/bundle.crt";

Перезапустіть службу, і все гаразд.

systemctl restart nginx.service

Крок 2 джерела: https://www.namecheap.com/support/knowledgebase/article.aspx/9781/2238/nginx-ssl-error0b080074x509-certificate-routines-x509checkprivatekeykey-values-mismatch

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