Ошибка nginx cannot load certificate: nginx не может прочитать сертификат
nginx не смог прочитать файл из строки ssl_certificate: файла нет по этому пути, в нём не сертификат или не хватило прав. Сверьте путь с ответом команды sudo certbot certificates и исправьте его в файле сайта.
Содержание 10
Что сделать прямо сейчас
- Посмотрите, чем кончается сообщение, — шаг 1.
- Узнайте правильный путь к сертификату — шаг 2.
- Исправьте путь в файле сайта — шаг 3.
- Проверьте и примените настройки — шаг 4.
Все команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
Что значит это сообщение
2026/10/09 12:00:00 [emerg] 2345#2345: cannot load certificate "/etc/letsencrypt/live/example.com/fullchain.pem": BIO_new_file() failed (SSL: error:…:system library::No such file or directory:calling fopen(/etc/letsencrypt/live/example.com/fullchain.pem, r) error:…:BIO routines::no such file)
nginx: configuration file /etc/nginx/nginx.conf test failedcannot load certificate — «не удаётся загрузить сертификат». В кавычках — путь из строки ssl_certificate. В скобках после слова SSL — что ответила библиотека OpenSSL, которая читает сертификаты; вместо многоточий у вас будут коды из цифр и букв. Дата, время и номер процесса у вас будут свои. В других сборках nginx та же строка начинается со слов nginx: [emerg].
Файла и номера строки в этом сообщении нет. Где написан путь, покажет команда из шага 3.
Если в сообщении cannot load certificate key, дело в строке ssl_certificate_key — в файле ключа. Шаги те же.
Шаг 1. Узнайте причину по концу сообщения
| Конец сообщения | Что случилось |
|---|---|
No such file or directory и no such file | Файла по этому пути нет: опечатка в пути, сертификат лежит в другой папке или его ещё не выпускали |
Permission denied | Не хватило прав. Проверку запустили без sudo — см. страницу nginx -t: Permission denied |
PEM_read_bio_X509_AUX() failed | Файл есть, но в нём не сертификат — например, в строке ssl_certificate указан ключ privkey.pem |
PEM_read_bio_PrivateKey() failed | Файл есть, но в нём не ключ — например, в строке ssl_certificate_key указан fullchain.pem |
Шаг 2. Найдите правильный путь к сертификату
sudo certbot certificatesКоманда покажет все сертификаты, которые выпустил Certbot. У каждого есть строка Certificate Path: — путь для ssl_certificate — и строка Private Key Path: — путь для ssl_certificate_key. Если сертификат на одно имя выпускали ещё раз, рядом может оказаться второй, с окончанием -0001 в названии папки.
Если команда ответила, что сертификатов нет, или её нет на сервере, сертификат ещё не выпускали. Выпустите его по инструкции Как поставить сертификат на свой VPS — Certbot сам пропишет его в настройки nginx.
Файлы Let’s Encrypt лежат в папке /etc/letsencrypt/live/ и названы так: fullchain.pem — сертификат, его указывают в строке ssl_certificate; privkey.pem — ключ, его указывают в строке ssl_certificate_key.
Шаг 3. Исправьте путь в файле сайта
sudo grep -Rn 'ssl_certificate' /etc/nginx/sites-enabled/ /etc/nginx/conf.d/Ключ -R заставляет grep заходить по ссылкам из sites-enabled в настоящие файлы, -n показывает номер строки. Пример ответа:
/etc/nginx/sites-enabled/example.com:12: ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pm;
/etc/nginx/sites-enabled/example.com:13: ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;Здесь в строке 12 опечатка: fullchain.pm вместо fullchain.pem. Откройте файл из сообщения сразу на нужной строке: число после знака + — номер строки из сообщения, путь — тот, что стоит перед двоеточием.
sudo nano -l +12 /etc/nginx/sites-available/example.comЕсли в сообщении путь начинается с /etc/nginx/sites-enabled/, откройте файл с тем же именем в папке /etc/nginx/sites-available/ — там лежит оригинал, а в sites-enabled только ссылка на него. Как это проверить, написано в разделе «Какой файл открывать».
Поставьте в строки пути из ответа sudo certbot certificates. Должно получиться так:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;Сохраните файл: Ctrl+O, Enter, затем Ctrl+X.
Если сертификат ещё не выпускали
Так бывает, когда файл сайта скопирован с другого сервера. Поставьте решётку # в начале строк, которые относятся к HTTPS: строк listen с портом 443, строк, которые начинаются с ssl_, и строк, где есть путь /etc/letsencrypt/. Решётка выключает строку, и nginx её не читает. Примените настройки по шагу 4, а затем выпустите сертификат по инструкции Как поставить сертификат на свой VPS.
Шаг 4. Проверьте и примените настройки
Проверьте настройки ещё раз командой sudo nginx -t. Когда в ответе будут слова syntax is ok и test is successful, примените их:
sudo systemctl reload nginxЕсли команда ничего не ответила, настройки применены.
Как проверить
sudo nginx -t отвечает syntax is ok и test is successful. Откройте https:// и адрес сайта в браузере: в адресной строке не должно быть предупреждения.
Похожие ошибки
| Сообщение | Чем отличается |
|---|---|
| key values mismatch | Оба файла на месте, но ключ от другого сертификата |
| no "ssl_certificate" is defined | Строки ssl_certificate в блоке нет совсем |
| nginx -t: Permission denied | Проверка запущена без sudo |
| open() failed | Не найден другой файл — из строки include или журнал |
Тексты сообщений на этой странице сверены с исходным кодом nginx 1.24.0 — эта версия стоит в Ubuntu 24.04. В других версиях слова могут немного отличаться.
Источники
- Исходный код nginx 1.24.0: ngx_event_openssl.c — тексты cannot load certificate и названия функций в сообщении.
- Исходный код OpenSSL 3.0.13: bss_file.c — слова calling fopen и no such file.
- Исходный код OpenSSL 3.0.13: err.c — названия system library, system lib и BIO routines.
- Документация Certbot: управление сертификатами — команда certbot certificates.
- Документация Certbot: где лежат сертификаты — какой файл указывать в ssl_certificate, а какой в ssl_certificate_key.
Сверено 9–10 октября 2026 года.
Что почитать дальше
Проверено и обновлено: 10.10.2026