Перейти к содержимому
ecdsa.com
npm (Node.js)Менеджеры пакетов

Сообщение об ошибке

npm error code SELF_SIGNED_CERT_IN_CHAIN

Также выводится как

  • npm ERR! code SELF_SIGNED_CERT_IN_CHAIN
  • npm error request to https://registry.example.com/lodash failed, reason: self-signed certificate in certificate chain

npm 10 и новее выводят «npm error code SELF_SIGNED_CERT_IN_CHAIN», npm 9 и более ранние версии — «npm ERR! code SELF_SIGNED_CERT_IN_CHAIN». В следующих строках код повторяется как errno и указывается URL с «reason: self-signed certificate in certificate chain».

npm (Node.js) — registry request over HTTPS

Что это означает

npm подключился к реестру и получил цепочку сертификатов, которая заканчивается самоподписанным корневым сертификатом, неизвестным Node.js. Для registry.npmjs.org это означает, что трафик перехватывают и переподписывают — почти всегда это делает корпоративный прокси или антивирус со сканированием HTTPS, корневому сертификату которого браузер доверяет, а npm — нет.

Почему это происходит

Как исправить

  1. 1.

    Передайте npm корневой сертификат прокси через cafile

    Экспортируйте корневой сертификат в формате PEM (его можно получить у ИТ-отдела или из хранилища доверенных сертификатов ОС) и укажите этот файл как cafile в npm. После этого npm доверяет только CA из этого файла, поэтому на ноутбуках, которые работают и вне корпоративной сети, добавьте в тот же файл публичные корневые сертификаты или лучше используйте NODE_EXTRA_CA_CERTS.

    bash
    npm config set cafile /etc/ssl/private-ca/corp-proxy-root.pem
    npm install
  2. 2.

    Или задайте NODE_EXTRA_CA_CERTS

    Переменная добавляет корневой сертификат для npm и всех остальных инструментов на Node.js, не заменяя публичные корневые сертификаты Node.js. В Windows задайте её как пользовательскую переменную окружения и откройте новый терминал.

    bash
    # Windows (PowerShell): setx NODE_EXTRA_CA_CERTS C:\certs\corp-proxy-root.pem
    export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-proxy-root.pem
    npm install
  3. 3.

    Или разрешите Node.js использовать хранилище ОС

    С NODE_USE_SYSTEM_CA=1 Node.js (и npm) доверяет тому же, чему доверяет операционная система, а на управляемых машинах сюда входит и корневой сертификат прокси.

    bash
    # Managed machines already trust the proxy root in the OS store
    NODE_USE_SYSTEM_CA=1 npm install
  4. 4.

    Временная диагностика: --strict-ssl=false

    Только чтобы убедиться, что проблема в доверии. Пакеты запускают скрипты установки, поэтому приём непроверенных загрузок — именно тот путь, которым атаки на цепочку поставок попадают на машины разработчиков; никогда не прописывайте strict-ssl=false в .npmrc.

    bash
    # Temporary diagnostic for one command only
    npm install --strict-ssl=false

Связанные ошибки

Открыть всю базу ошибок подписей