Протокол SSL: ошибка:0B080074:x509-на процедуры, сертификат x509 в проверить закрытого ключа:ключа значениям рассогласования

Я не могу настроить 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 года.

вот что я проверил:

  • сертификат и закрытый ключ имеет пробелы.
  • Я не использую сервер по умолчанию.ключевой файл.
  • I проверено в nginx.conf и директивы указывают на правильный закрытый ключ и сертификат.

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

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

10 ответов


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

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

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


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

-----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

рядом вверху вы должны увидеть " Subject:", а затем материал, который выглядит как ваши данные. Если вместо этого он выглядит как ваш CA, ваш пакет, вероятно, находится в неправильном порядке; вы можете попробовать сделать резервную копию, а затем переместить последний сертификат в начало, надеясь, что это тот, который является вашим сертификатом.

Если это не сработает, вам, возможно, просто придется переоформить сертификат. Когда я делаю CSR, мне нравится четко обозначать, для какого сервера он предназначен (вместо просто ssl.ключ или сервер.ключ) и сделать копию его с помощью дата в имени, как mydomain.20150306.ключ и т. д. таким образом, пары закрытого и открытого ключей вряд ли будут перепутаны с другим набором.


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

    в openssl x509-на-noout -модуль -в сертификат.ЭЛТ | в OpenSSL MD5 в

    в OpenSSL шифрование RSA -noout -модуль -в закрытый ключ.ключ | в OpenSSL MD5 в


Если это произойдет, и вы используете 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 docs " где мои сертификаты?"


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

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

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


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

Перед (что неправильно) :

cat ca_bundle.crt certificate.crt > bundle.crt

После (что правильно)

cat certificate.crt ca_bundle.crt > bundle.crt

С nginx manpage:

Если сертификат сервера и пакет были объединены в неправильном порядке, nginx откажется запускаться и выдаст ошибку сообщение:

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

в моем случае я хотел изменить сертификат ssl, потому что я изменил свой сервер, поэтому мне пришлось создать новый csr с помощью этой команды:

$openssl req-new-newkey rsa: 2048-nodes-keyout mysite.ключ -из личного сайта.КСО

Я послал mysite.csr-файл для поставщика ssl компании и после того , как я получил сертификат crt, а затем я перезапустил nginx, и у меня есть эта ошибка

(протокол SSL: ошибка:0B080074:сертификат x509 подпрограммы: X509_check_private_key: несоответствие ключевых значений)

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

Итак, чтобы заставить его работать, я создал новый csr-файл, но я изменил имя файла с помощью этой команды

$openssl req-new-newkey rsa: 2048-nodes-keyout mysite_new.key-out mysite_new.КСО

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


мои 5 центов по вопросу:

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

если у вас есть такая ошибка, пожалуйста, проверьте свой сертификат.


Это также может произойти, когда ваш CA выдает промежуточный сертификат

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

в моем случае, go-папа был CA и это специфично для того, как они выдают сертификат и промежуточные пакеты сертификатов.

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

С Nginx, если ваш ЦС включал промежуточный сертификат, вы должны создать один цепной файл сертификата, который содержит ваш сертификат и промежуточные сертификаты ЦС.

вы можете использовать эту команду для создания объединенного файла с именем example.com.прикован.crt:

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


Для Nginx;

1-openssl req-newkey rsa: 2048-узлы-домен keyout.com.домен key-out.com.csr

2-SSL файл domain_com.crt и domain_com.файлы ca-bundle копируют новый файл в домене вставки.com.прикован.crt

3 - добавление файлов nginx: a. ssl_certificate / home / user/domain_ssl / домен.com.прикован.ЭЛТ; b. ssl_certificate_key / главная/пользователь / domain_ssl / домен.com.ключ;

Lates перезапустить Nginx