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

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

npm error code CERT_HAS_EXPIRED

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

  • npm ERR! code CERT_HAS_EXPIRED
  • npm error request to https://registry.example.com/lodash failed, reason: certificate has expired

npm 10 и новее выводят «npm error code CERT_HAS_EXPIRED», npm 9 и более ранние версии — «npm ERR! code CERT_HAS_EXPIRED». В следующих строках указан URL с «reason: certificate has expired».

npm (Node.js) — registry request over HTTPS

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

По часам этой машины срок действия одного из сертификатов в цепочке, которую npm получил от реестра (или от промежуточного прокси), уже истёк. Для публичного реестра это почти никогда не означает, что истёк сертификат самого npm: причина обычно в старом CA, закреплённом в конфигурации npm, в устаревшем списке корневых сертификатов Node.js, в сертификате прокси или в неправильно идущих часах. У частных реестров срок действия сертификата сервера действительно мог истечь.

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

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

  1. 1.

    Выясните, о каком реестре и каком сертификате идёт речь

    Посмотрите, какой реестр настроен и до какой даты действует сертификат, который он отдаёт. Сертификат частного реестра с истёкшим сроком действия необходимо продлить на сервере.

    bash
    npm config get registry
    echo | openssl s_client -connect registry.example.com:443 -servername registry.example.com 2>/dev/null \
      | openssl x509 -noout -subject -enddate
  2. 2.

    Удалите устаревшие настройки ca или cafile

    npm config list показывает настройки со всех уровней .npmrc; удалите записи ca или cafile, которые указывают на старые сертификаты (или обновите файл, на который они ссылаются).

    bash
    # An old CA pinned in .npmrc replaces the default roots: list and remove it
    npm config list | grep -E '^;? *(ca|cafile)'
    npm config delete ca
    npm config delete cafile
  3. 3.

    Обновите Node.js и npm

    Поддерживаемый релиз Node.js содержит современный список корневых сертификатов; после этого обновите npm.

    bash
    node -v && npm -v   # Node.js bundles its root list; very old releases carry expired roots
    # upgrade Node.js to a maintained release (nvm, fnm, volta or your OS packages), then:
    npm install -g npm@latest

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

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