Ошибка nginx key values mismatch: ключ от другого сертификата
Ключ из строки ssl_certificate_key не подходит к сертификату из строки ssl_certificate: файлы от разных сертификатов. Возьмите оба пути от одного сертификата — их покажет команда sudo certbot certificates.
Содержание 10
Что сделать прямо сейчас
- Посмотрите, какие пути стоят в файле сайта, — шаг 1.
- Проверьте, подходят ли файлы друг к другу, — шаг 2.
- Поставьте оба пути от одного сертификата — шаг 3.
- Проверьте и примените настройки — шаг 4.
Все команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
Что значит это сообщение
2026/10/09 12:00:00 [emerg] 2345#2345: SSL_CTX_use_PrivateKey("/etc/letsencrypt/live/example.com-0001/privkey.pem") failed (SSL: error:…:x509 certificate routines::key values mismatch)
nginx: configuration file /etc/nginx/nginx.conf test failedkey values mismatch — «значения ключа не совпадают». Сертификат и ключ создаются парой: в сертификате записана открытая часть ключа, и nginx сверяет её с файлом из строки ssl_certificate_key. Здесь файлы от разных пар. В кавычках — путь к ключу. Вместо многоточия у вас будет код из цифр и букв. Дата, время и номер процесса у вас будут свои. В других сборках nginx та же строка начинается со слов nginx: [emerg].
Файла и номера строки в сообщении нет. Где написаны пути, покажет команда из шага 1.
Причины:
- пути ведут в разные папки — например, сертификат из
example.com, а ключ изexample.com-0001. Вторая папка появляется, если сертификат на это имя выпускали ещё раз; - после выпуска нового сертификата заменили только одну из двух строк;
- файлы сертификата скопировали с другого сервера не парой.
Шаг 1. Посмотрите пути в файле сайта
sudo grep -Rn 'ssl_certificate' /etc/nginx/sites-enabled/ /etc/nginx/conf.d/Пример ответа:
/etc/nginx/sites-enabled/example.com:12: ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
/etc/nginx/sites-enabled/example.com:13: ssl_certificate_key /etc/letsencrypt/live/example.com-0001/privkey.pem;Сертификат взят из папки example.com, а ключ — из example.com-0001.
Шаг 2. Проверьте, подходят ли файлы друг к другу
Две команды покажут, от одной ли пары файлы. Подставьте в них свои пути из шага 1: в первую — путь из строки ssl_certificate, во вторую — из строки ssl_certificate_key.
sudo openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -pubkey | sha256sum
sudo openssl pkey -in /etc/letsencrypt/live/example.com-0001/privkey.pem -pubout | sha256sumПервая команда достаёт открытую часть ключа из сертификата, вторая — из файла ключа. Программа sha256sum превращает каждую в строку из 64 букв и цифр. Если строки одинаковые, файлы — пара. Если разные, ключ от другого сертификата.
Шаг 3. Возьмите оба пути от одного сертификата
sudo certbot certificatesКоманда покажет все сертификаты, которые выпустил Certbot. У каждого есть строка Certificate Path: — путь для ssl_certificate — и строка Private Key Path: — путь для ssl_certificate_key. Если сертификат на одно имя выпускали ещё раз, рядом может оказаться второй, с окончанием -0001 в названии папки.
Если сертификатов на это имя два, берите оба пути из одного сертификата — из одного блока ответа команды. Откройте файл из сообщения сразу на нужной строке: число после знака + — номер строки из сообщения, путь — тот, что стоит перед двоеточием.
sudo nano -l +13 /etc/nginx/sites-available/example.comЕсли в сообщении путь начинается с /etc/nginx/sites-enabled/, откройте файл с тем же именем в папке /etc/nginx/sites-available/ — там лежит оригинал, а в sites-enabled только ссылка на него. Как это проверить, написано в разделе «Какой файл открывать».
Поправьте путь так, чтобы обе строки вели в одну папку:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;Сохраните файл: Ctrl+O, Enter, затем Ctrl+X. Перед применением можно ещё раз сравнить файлы командами из шага 2: строки должны совпасть.
Шаг 4. Проверьте и примените настройки
Проверьте настройки ещё раз командой sudo nginx -t. Когда в ответе будут слова syntax is ok и test is successful, примените их:
sudo systemctl reload nginxЕсли команда ничего не ответила, настройки применены.
Как проверить
sudo nginx -t отвечает syntax is ok и test is successful. Откройте сайт по https:// — в адресной строке не должно быть предупреждения.
Похожие ошибки
| Сообщение | Чем отличается |
|---|---|
| cannot load certificate | Файла нет по пути или в нём не то, что нужно |
| no "ssl_certificate" is defined | Строк с сертификатом в блоке нет совсем |
Тексты сообщений на этой странице сверены с исходным кодом nginx 1.24.0 — эта версия стоит в Ubuntu 24.04. В других версиях слова могут немного отличаться.
Источники
- Исходный код nginx 1.24.0: ngx_event_openssl.c — текст SSL_CTX_use_PrivateKey() failed.
- Исходный код OpenSSL 3.0.13: x509_err.c — текст key values mismatch.
- Исходный код OpenSSL 3.0.13: x509_cmp.c — проверка ключа: сравнение открытой части ключа с сертификатом.
- man openssl-x509 — ключ -pubkey.
- man openssl-pkey — ключ -pubout.
- man sha256sum.
- Документация Certbot: управление сертификатами — команда certbot certificates.
Сверено 9–10 октября 2026 года.
Что почитать дальше
Проверено и обновлено: 10.10.2026