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

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

npm error code ERR_TLS_CERT_ALTNAME_INVALID

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

  • npm ERR! code ERR_TLS_CERT_ALTNAME_INVALID
  • npm error request to https://registry.example.com/lodash failed, reason: Hostname/IP does not match certificate's altnames: Host: registry.example.com. is not in the cert's altnames: DNS:www.example.com

npm 10 и новее выводят «npm error code ERR_TLS_CERT_ALTNAME_INVALID», npm 9 и более ранние версии — «npm ERR! code ERR_TLS_CERT_ALTNAME_INVALID». Хост и altnames в строке причины берутся из вашей конфигурации и сертификата сервера.

npm (Node.js) — registry request over HTTPS

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

Сертификат реестра считается доверенным, но выпущен не для того имени хоста, которое npm взял из URL реестра. В строке причины указаны обе стороны: хост, к которому обращался npm, и имена, которые содержит сертификат. Обычно так бывает после переезда реестра на новое имя или когда в URL реестра указан псевдоним, IP-адрес или не то окружение.

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

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

  1. 1.

    Сравните настройку реестра (registry) в npm с сертификатом

    Выведите настроенный реестр (и настройки прокси) и список SAN сертификата. В lock-файлах тоже есть URL в полях resolved; в них должен быть тот же хост.

    bash
    npm config get registry
    npm config list | grep -iE 'registry|proxy'
    echo | openssl s_client -connect registry.example.com:443 -servername registry.example.com 2>/dev/null \
      | openssl x509 -noout -ext subjectAltName
  2. 2.

    Направьте npm на имя из сертификата

    Обновите настройку реестра (registry) на всех уровнях .npmrc (и пересоздайте lock-файлы, если в них остался старый хост).

    bash
    # Use the host name the registry's certificate was issued for
    npm config set registry https://npm.example.com/
  3. 3.

    Владельцам реестров: включите в сертификат все используемые имена

    Перевыпустите сертификат реестра со всеми именами хостов, по которым обращаются клиенты, включая псевдонимы, оставленные для совместимости.

    bash
    # Registry owners: include every name clients use
    sudo certbot certonly --nginx -d npm.example.com -d registry.example.com

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

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