Node.js LinuxWindowsNode.js

Node.js: Node.js показывает ошибку сертификата при HTTPS-запросе

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Запрос https.get() или fetch из Node.js завершается кодами UNABLE_TO_VERIFY_LEAF_SIGNATURE, SELF_SIGNED_CERT_IN_CHAIN, CERT_HAS_EXPIRED либо несовпадением имени. Причину устанавливают по сертификату удалённого сервера и доверенным корням клиентской среды.

В этой статье
  1. Симптомы и условия возникновения
  2. Причины и как их отличить
  3. Пошаговая диагностика и решение
  4. Как проверить результат и что делать, если не помогло

#Симптомы и условия возникновения

Запрос https.get() или fetch из Node.js завершается кодами UNABLE_TO_VERIFY_LEAF_SIGNATURE, SELF_SIGNED_CERT_IN_CHAIN, CERT_HAS_EXPIRED либо несовпадением имени. Причину устанавливают по сертификату удалённого сервера и доверенным корням клиентской среды. Для начала проверьте используемую версию среды и точный текст ошибки на копии проекта, не меняя рабочий сервер.

#Причины и как их отличить

Возможная причинаКак узнатьЧто делать
Сервер не отдаёт промежуточный сертификатВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление.Ошибка цепочки наблюдается у нескольких клиентовАдминистратор сервера должен настроить полную цепочку.
Корпоративный посредникВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление.Сертификат выдаёт корпоративный центр, браузер работает, Node — нетПолучить утверждённый сертификат центра и настроить доверие.
Истёк сертификат или неправильное времяВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление.CERT_HAS_EXPIRED или CERT_NOT_YET_VALIDИсправить время или заменить сертификат на стороне владельца.

#Пошаговая диагностика и решение

  1. 1. Запишите код и домен запросаИз журнала скопируйте error.code и домен назначения без токенов и параметров запроса. Различайте сбой при установке TLS и ответ HTTP 403/500: во втором случае TLS мог успешно пройти.
  1. 2. Проверьте системное время и адресНа клиенте проверьте дату, часовой пояс и точный домен из URL. Нельзя подменять адрес IP: проверка имени сертификата выполняется по имени сервера. Исправление неправильного времени выполните штатными настройками ОС.
  1. 3. Сравните сертификат через curlВ терминале того же компьютера запустите curl -Iv https://example.com/ с реальным доменом. Успех curl не гарантирует успех Node: наборы доверенных сертификатов могут различаться. Не используйте флаг -k.
    Linux · Терминал (Bash)Команда
    Команда не передаёт пароль; замените example.com на свой домен без секретных параметров. Ожидается успешная проверка TLS и HTTP-заголовки.
    curl -Iv https://example.com/
  1. 4. Отделите проблему сервера от доверия клиентаЕсли разные машины не доверяют цепочке — проверьте промежуточные сертификаты и срок действия на сервере. Если проблема только на корпоративной сети, выясните у администратора, есть ли официальный TLS-посредник; не устанавливайте произвольные сертификаты из интернета.
  1. 5. Добавьте утверждённый центр сертификацииЕсли организация выдаёт файл доверенного корневого центра в PEM, можно указать путь NODE_EXTRA_CA_CERTS ДО запуска процесса Node. В Linux экспортируйте переменную только в тестовом терминале. Для systemd настройка должна быть в управляемом конфигурационном файле службы, без хранения секретов.
    Linux · Терминал (Bash)Команда
    Linux/macOS, тестовый запуск без root; пример пути замените подтверждённым PEM. Переменная читается при старте Node.
    NODE_EXTRA_CA_CERTS=/etc/ssl/company/approved-root.pem node app.js
  1. 6. Проверьте особые настройки TLSВ приложении найдите https.Agent({ca: ...}) или tls.connect({ca: ...}): явное поле ca меняет список доверенных сертификатов для этого подключения. Исправляйте его по документации вашей библиотеки; NODE_EXTRA_CA_CERTS может не повлиять.
  1. 7. Подтвердите цепочку и верните штатный запускПовторите исходный запрос и проверьте код ответа и адрес назначения. Удалите временные переменные из тестового терминала после проверки. Если сервер отдаёт плохую цепочку, обратитесь к владельцу: клиентским обходом исправлять её нельзя.

#Как проверить результат и что делать, если не помогло

При повторном HTTPS-запросе нет TLS-кода ошибки, сертификат соответствует домену и проверяется без отключения защиты. При повторении сохраните код и сведения о доверенной цепочке для администратора.

Если неисправность повторилась, выпишите первый код ошибки и действие, на котором она возвращается. Сравните версию Node.js/npm, рабочий каталог, настройки процесса и журнал тестового запуска. Откатите только внесённые изменения из предварительно сохранённой копии, затем разберите причину на отдельной среде.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.