it-swarm.com.ru

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

Я не могу настроить SSL. Я гуглил и нашел несколько решений, но ни одно из них не помогло мне. Мне нужна помощь, пожалуйста ...

Вот ошибка, которую я получаю при попытке перезапустить nginx:

[email protected]:~# 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 и директивы Указывают на правильный закрытый ключ и сертификат.

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

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

69
Galou

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

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

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

29
dev0z

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

-----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.key или server.key), и делать его копию с указанием даты в имени, например, mydomain.20150306.key и т.д. Их пары закрытых и открытых ключей вряд ли перепутать с другим набором. 

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

    openssl x509 -noout -modulus -in сертификат.crt | OpenSSL MD5

    openssl rsa -noout -modulus -in privateKey.key | OpenSSL MD5

57
dev0z

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

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

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)
12
Mandeep Gill

Если это происходит и вы используете 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 «Где мои сертификаты?»

8
Marian

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

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

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

3
fuweichin

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

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

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

1
Nick

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

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

Я отправил файл 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.csr

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

1
lemon fish

Это случилось со мной, когда я объединил bundle.crt и основной сертификат. Причина была в том, что я скопировал основной сертификат ниже bundle.crt. Должно быть наоборот

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

0
Krishna

В моем случае проблема заключалась в том, что я создавал сертификаты, не вводя никаких данных в интерфейс 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
Viktor Kruglikov

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

Я столкнулся с этой проблемой (дважды) с помощью 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.chained.crt:

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

0
Shyam Habarakada

Для 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: а. ssl_certificate /home/user/domain_ssl/domain.com.chained.crt; б. ssl_certificate_key /home/user/domain_ssl/domain.com.key;

Поздний перезапуск Nginx

0
electrocoder