Ошибки

Ошибка nginx key values mismatch: ключ от другого сертификата

Ключ из строки ssl_certificate_key не подходит к сертификату из строки ssl_certificate: файлы от разных сертификатов. Возьмите оба пути от одного сертификата — их покажет команда sudo certbot certificates.

Обновлено 10.10.2026≈ 5 мин чтения
Содержание 10

Что сделать прямо сейчас

  1. Посмотрите, какие пути стоят в файле сайта, — шаг 1.
  2. Проверьте, подходят ли файлы друг к другу, — шаг 2.
  3. Поставьте оба пути от одного сертификата — шаг 3.
  4. Проверьте и примените настройки — шаг 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 failed

key 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. В других версиях слова могут немного отличаться.

Источники

Сверено 9–10 октября 2026 года.

Что почитать дальше

Проверено и обновлено: 10.10.2026