SSL: ошибка: 0B080074: процедуры сертификата x509: X509_check_private_key: несоответствие значений ключей

102

Я не могу настроить 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, и директивы указывают на правильный закрытый ключ и сертификат.

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

Спасибо за помощь. :)

Галу
источник

Ответы:

37

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

Этим все сказано. У вас есть несоответствие между вашим ключом и сертификатом.

Модуль должен совпадать. Убедитесь, что у вас правильный ключ.

dev0z
источник
Если я чего-то не упускаю, вы абсолютно ХОТИТЕ, чтобы открытый и закрытый ключи (файл сертификата и файл ключа) были разными.
Марк Берри
1
В modulus' and the части общественного Экспонента в ключе и сертификате должны совпадать. Без сомнения файлы разные. Ключ создается для одного конкретного сертификата.
dev0z 04
Виноват. Я думал, он имел в виду MD5 файлов. Теперь я вижу, что у сертификатов есть отдельная функция модуля: как подтвердить, что модуль в вашем закрытом ключе соответствует модулю в открытом ключе вашего сертификата SSL / TLS до установки? .
Марк Берри
168

Как только вы установили, что они не совпадают, у вас все еще остается проблема - что с этим делать. Часто сертификат может быть просто неправильно собран. Когда центр сертификации подписывает ваш сертификат, он отправляет вам блок, который выглядит примерно так:

-----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 отказывался от сертификата, в то время как я мог видеть, что он содержит данные
Jacopofar
3
Хорошо, это также сработало для меня с сертификатом Comodo и Ngix. Просто переместил последний блок сертификата наверх. Спасибо за подробное объяснение и понимание этой проблемы.
Andy D
1
Мне это помогает! Очень полезный ответ! Спасибо вам большое!
Олег Клименко
71
  1. Убедитесь, что ваш сертификат и ключ имеют формат PEM. Если нет, то конвертируйте их с помощью команды openssl.
  2. Проверьте MD5-хэш открытого ключа, чтобы убедиться, что он совпадает с тем, что находится в закрытом ключе.

    openssl x509 -noout -modulus -in certificate.crt | openssl md5
    openssl rsa -noout -modulus -in privateKey.key | openssl md5
    
dev0z
источник
7
Хороший совет ! Что ж, по-прежнему получаю ту же ошибку, даже если хеш md5 у меня такой же ^^
Delphine
4
Спасибо, что рассказали, как проверить хэши. Я обнаружил, что у меня была ошибка копирования и вставки, и в начале моего pem не хватало ни одного тире. Вы только что избавили меня от множества головных болей. Ура.
Джастин Фортье,
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
На самом деле это лучший ответ на этот вопрос, чем принятый.
baldrs
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, затем собственный сертификат.
ingopingo
5

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

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

Я понял эту проблему, сравнив проблемный файл сертификата с рабочим файлом сертификата.

Fuweichin
источник
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 был центром сертификации, и это зависит от того, как они выдают сертификат и промежуточные пакеты сертификатов.

Вот отрывок из сообщения в блоге Марко

При использовании 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. Файл domain_com.crtи domain_com.ca-bundleфайлы SSL , затем скопируйте новый файл в вставку 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).

Kenorb
источник
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

Мариоферт
источник