#Симптомы и условия возникновения
При скачивании пакета npm выдаёт UNABLE_TO_GET_ISSUER_CERT_LOCALLY, SELF_SIGNED_CERT_IN_CHAIN или CERT_HAS_EXPIRED. Отличайте неполную цепочку реестра от корпоративного TLS-посредника и неверного времени. Для начала проверьте используемую версию среды и точный текст ошибки на копии проекта, не меняя рабочий сервер.
#Причины и как их отличить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Недоверенный корпоративный кореньВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | В корпоративной сети npm ошибается, браузер доверяет | Установить утверждённый CA с участием администратора. |
| Сломанная цепочка реестраВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | Ошибка на нескольких независимых устройствах | Исправлять сервер сертификатов, а не клиентскую проверку. |
| Неверный реестр или времяВ этой ситуации наблюдается конкретный диагностический признак. Сопоставьте его с журналом ошибки и результатом соответствующей проверки, прежде чем выбирать исправление. | В .npmrc указан частный registry либо дата системы неправильна | Сверить адрес и дату, проверить доступный CA. |
#Пошаговая диагностика и решение
- 1. Запишите точный код npm и адрес реестраИз журнала npm скопируйте только код ошибки и безопасную часть URL. Не передавайте содержимое ~/.npmrc: там могут быть токены доступа.
- 2. Проверьте фактический registryВ корне нужного проекта выполните
npm config get registry. Также проверьте настройки registry по областям пакетов в .npmrc; адрес общего реестра не покрывает автоматически@scope:registry. - Безопасная команда чтения; вывод URL реестра без токенаLinux · Терминал (Bash)КомандаБезопасная команда чтения; вывод URL реестра без токена. Не копируйте всё содержимое .npmrc.
npm config get registry
- 3. Проверьте дату и сертификат снаружи npmСверьте время системы; затем запустите
curl -Iv https://registry.npmjs.org/либо URL разрешённого частного реестра. Не применяйте--insecure: такой обход не решает проблему цепочки.
- 4. Выясните, есть ли корпоративная TLS-проверкаЕсли ошибка только внутри рабочей сети, спросите у ИТ-службы, используется ли собственный доверенный CA. Попросите публичный сертификат центра в PEM, а не закрытый ключ.
- 5. Настройте доверенный сертификат для npmВ тестовой копии проекта укажите путь к PEM через утверждённый проектный
.npmrcили временноnpm_config_cafile. Название параметраcafile; файл должен существовать и быть доверенным. Не храните пароль рядом с ним. - Linux/macOS: путь приведён как примерLinux · Терминал (Bash)КомандаLinux/macOS: путь приведён как пример. Проверяет соединение с выбранным registry через указанную CA; Windows использует свой полный путь к PEM.
npm --cafile=/path/to/approved-ca.pem ping
- 6. Проверьте настройки Node.jsЕсли npm использует Node с другим хранилищем сертификатов, сравните версию npm/node и параметры NODE_EXTRA_CA_CERTS. Устанавливайте доверенную CA до запуска процесса npm, а не внутри запущенного скрипта.
- 7. Повторите установку без отключения TLSВ тестовой копии выполните
npm view имя-пакета versionи убедитесь, что запрос проходит с проверкой сертификата. Если продолжает падать, передайте администратору код TLS и сертификат сервера для восстановления цепочки.
#Как проверить результат и что делать, если не помогло
Команда npm view обращается к ожидаемому реестру без сертификатных ошибок, параметр strict-ssl остаётся включён.
Если неисправность повторилась, выпишите первый код ошибки и действие, на котором она возвращается. Сравните версию Node.js/npm, рабочий каталог, настройки процесса и журнал тестового запуска. Откатите только внесённые изменения из предварительно сохранённой копии, затем разберите причину на отдельной среде.