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

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

npm error code DEPTH_ZERO_SELF_SIGNED_CERT

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

  • npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT

npm 10 и новее выводят «npm error code DEPTH_ZERO_SELF_SIGNED_CERT», npm 9 и более ранние версии — «npm ERR! code DEPTH_ZERO_SELF_SIGNED_CERT». В строке причины написано «self-signed certificate», а в последних версиях Node.js к ней добавляется подсказка про --use-system-ca.

npm (Node.js) — registry request over HTTPS

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

Реестр, к которому подключился npm, предъявил единственный самоподписанный сертификат, которому Node.js не доверяет. Цепочки CA нет вообще, поэтому выхода только два: осознанно доверять именно этому сертификату или выдать реестру сертификат, выпущенный CA. Обычно это локальные или самостоятельно развёрнутые реестры, запущенные со сгенерированным сертификатом.

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

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

  1. 1.

    Доверяйте именно этому сертификату

    Получите сертификат, сравните его отпечаток SHA-256 с тем, что показан на хосте реестра, затем добавьте его через NODE_EXTRA_CA_CERTS (или параметр cafile в npm).

    bash
    # Save the registry's certificate, check its fingerprint, and trust exactly this file
    openssl s_client -connect registry.example.com:443 -servername registry.example.com </dev/null 2>/dev/null \
      | openssl x509 -out registry.pem
    openssl x509 -in registry.pem -noout -fingerprint -sha256
    NODE_EXTRA_CA_CERTS=$PWD/registry.pem npm install
  2. 2.

    Используйте частный реестр только для своего scope

    Если направлять в частный реестр только scope вашей организации, все публичные пакеты по-прежнему загружаются с registry.npmjs.org, и проблема с сертификатом на частном хосте их не затронет.

    ini
    ; .npmrc — only @acme packages come from the private registry; the rest from npmjs
    @acme:registry=https://registry.example.com/
  3. 3.

    Выдайте реестру сертификат, выпущенный CA

    Сертификат от публичного CA (ACME) или от корпоративного CA, которому ваши машины уже доверяют, избавляет от необходимости в исключениях для отдельных сертификатов.

    bash
    # Give the registry a certificate from a CA your machines trust (public ACME or company CA)
    sudo certbot certonly --standalone -d registry.example.com

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

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