npm ERR! код UNABLE_TO_GET_ISSUER_CERT_LOCALLY

118

Я пробую все способы создания реагирующего приложения. Я пробовал с maven, и теперь я пытаюсь использовать систему сборки приложений crate-response-app от инкубаторов Facebook.

Когда я попытался запустить команду create-react-app my-appв среде npm, она работала в моей личной системе без проблем. Но когда я попробовал ту же команду в своей рабочей среде, я столкнулся с этой ошибкой в ​​командной строке.

npm ERR! node v6.10.2
npm ERR! npm  v3.10.10
npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY

npm ERR! unable to get local issuer certificate
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>
Динеш
источник
1
Я тоже не мог использовать, sudoкогда бегал npm install aws-sdk. Бег sudo npm install aws-sdkвызвал у меня эту ошибку.
Kyle Bridenstine 06

Ответы:

297

Быстрое решение из поиска в Интернете было npm config set strict-ssl false, к счастью, оно сработало. Но в рамках моей рабочей среды я ограничен установкой флага strict-ssl в значение false.

Позже я нашел безопасное и рабочее решение,

npm config set registry http://registry.npmjs.org/  

это сработало отлично, и я получил сообщение об успехе Happy Hacking!, не установив для флага strict-ssl значение false.

Динеш
источник
2
Я тоже только что вернулся к использованию HTTP-версии репозитория NPM (в отличие от registry.npmjs.org ), поскольку мой рабочий прокси вызывал проблемы (поскольку он действует как MITM, вызывая проблемы с проверкой сертификата) Однажды я пойму из-за проблемы с сертификатом, но мне просто нужно было загрузить пакет, черт возьми!
Роберт Дандон,
1
Я думал, что у меня уже есть этот параметр, но когда я присмотрелся, у меня был https вместо http ( registry.npmjs.org ). Поменял на http, и все заработало.
Ашиш
Для меня я сделал это, но я также не мог использовать, sudoкогда я бегал npm install aws-sdk. Бег sudo npm install aws-sdkвызвал у меня эту ошибку.
Kyle Bridenstine 06
Я получаю ту же ошибку , показанную на этом посту , так что я побежал npm config set strict-ssl falseи , npm config set registry http://registry.npmjs.org/ но я все еще получаю ошибку при запуске , sudo npm install aws-sdkно когда я опустил sudoчасть и просто побежал npm install aws-sdkон работал.
Kyle Bridenstine 06
у меня ничего кроме настройки npm config set strict-ssl falseне работает. Я считаю, что это то, что команда node.jsи npmкоманда должны изучить и задокументировать с надлежащей работой, если это не может быть исправлено для них.
RinoTom
24

может происходить то, что ваша компания расшифровывает определенный трафик и повторно шифрует его с помощью своего сертификата (который, вероятно, уже есть в вашей цепочке ключей или доверенных корневых сертификатах)

если вы используете node 7 или более позднюю версию, я обнаружил, что это исправление совместимо с node и node-gyp (для Windows вам нужно сделать это по-другому, но вам просто нужно добавить эту переменную среды):

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem" (в Windows может потребоваться удалить кавычки - см. комментарии)

файл pem может иметь несколько сертификатов: https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

убедитесь, что ваши сертификаты находятся в правильном формате pem (вам нужны реальные разрывы строк, а не буквальные \n )

Я не мог заставить его работать с относительными путями ( .или~ )

Это исправление в основном указывает npm и node-gyp использовать проверку по сравнению с обычными центрами сертификации, но также разрешает этот сертификат, когда он встречается.

В идеале вы могли бы использовать доверенные сертификаты вашей системы, но, к сожалению, это не так.

Иордания
источник
Отлично. Проголосуйте за ваше подробное объяснение. Помогли мне лучше понять. Хорошая информация.
vissu 03
2
В Windows путь не работал, если я не убрал кавычки.
Крис Андерсон
1
У меня эта проблема из-за BlueCoat, и я должен ссылаться на ваш ответ каждые несколько месяцев. Определенно лучшее решение, чем отключение строгого SSL - спасибо!
Джордан Грей,
1
Где я могу найти файл .pem в Windows. Я обыскал весь жесткий диск в поисках pem-файла, который нашел несколько уровней глубоко внутри Windows \ System32. Но это не работает
Санчит Джайн
10

Изменение URL-адреса репозитория NPM на HTTP работает как быстрое решение, но я хотел использовать HTTPS.

В моем случае прокси у моего работодателя (ZScaler) вызывал проблемы (поскольку он действует как MITM, вызывая проблемы с проверкой сертификата)

Я забыл, что нашел скрипт, который помогает с этим, и Git (для клонирования репозиториев GitHub через HTTPS была такая же проблема) и раздвоил его для моего использования

По сути, для git он делает следующее:

git config --global http.proxy http://gateway.zscaler.net:80/
git config --system http.proxy http://gateway.zscaler.net:80/

а для Node он добавляет proxy=http://gateway.zscaler.net:80/в конецc:\Users\$USERNAME\npm\.npmrc

Это решило проблему для меня.

Роберт Дандон
источник
2
Вы можете проверить, в каком облаке ZS настроена ваша компания. Как правило, проверьте ip.zscaler.comимя облака и укажите его в URL-адресе. Например: если там написано, zscalertwo.netзамените на следующий URL:gateway.zscalertwo.net
Рахул Бхарадвадж
6

Опробовав все решения, которые удалось найти:

  • Отключение строгого ssl: npm config set strict-ssl=false
  • Изменение реестра на http вместо https: npm config set registry http://registry.npmjs.org/
  • Изменение настроек моего кафе: npm config set cafile /path/to/your/cert.pem
  • Прекратите отклонять неизвестные ЦС: set NODE_TLS_REJECT_UNAUTHORIZED=0

Решение, которое, как мне кажется, сейчас работает лучше всего, - это использовать переменную среды NODE_EXTRA_CA_CERTS, которая расширяет существующие центры сертификации, а не заменяет их параметром cafile в вашем файле .npmrc. Вы можете установить его, введя это в свой терминал:NODE_EXTRA_CA_CERTS=path/to/your/cert.pem

Конечно, установка этой переменной каждый раз может раздражать, поэтому я добавил ее в свой профиль bash, чтобы она устанавливалась каждый раз, когда я открываю терминал. Если у вас еще нет ~/.bash_profileфайла, создайте его. Затем в конце этого файла добавьте export NODE_EXTRA_CA_CERTS=path/to/your/cert.pem. Затем удалите настройку cafile в своем .npmrc.

RyanDay
источник
Четвертый вариант был шармом; process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
tomdemuyt
5

Поверьте мне, это сработает для вас:

    npm config set registry http://registry.npmjs.org/  
Прашант Кешанна
источник
Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится. Пожалуйста, обратитесь к
разделу «
4

Была такая же ошибка. Похоже, это связано с сертификатами SSL. Если вы используете NPM для общедоступных пакетов (безопасность HTTPS не требуется), вы можете отключить строгую проверку ключа SSL с помощью следующей команды.

Это может быть самое простое исправление, если вы просто хотите установить несколько общедоступных пакетов один раз.

npm config set strict-ssl=false
Джейсон Гейгер
источник
5
При этом существует неотъемлемый риск: если вы стали жертвой гнусной атаки типа «человек посередине», пакет может быть изменен при его загрузке.
Alex KeySmith
@AlexKeySmith Вы правы. Однако шансы довольно низкие. Для некоторых это может быть единственный вариант. Caveat Emptor
Джейсон Гейгер
1

У меня была эта ошибка, когда я пытался обновить npm, но у меня была действительно старая версия (1.3.6!), Установленная из yum в AWS Linux. Мне удалось вручную установить более новую версию npm, и все было исправлено.

Drussey
источник
0

Приведенный ниже код отлично работал у меня здесь, сделайте http только вместо https

npm config set registry http://registry.npmjs.org/  
Мохд Шарик
источник
0

В моем случае в какой-то момент я установил свою глобальную конфигурацию на использование сертификата, предназначенного для проекта.

npm config list

/path/to/global/.npmrc
NODE_EXTRA_CA_CERTS = "./certs/chain.pem"

Я открыл файл, удалил строку и npm installснова работал.

joels
источник
0

получил ошибку ниже

PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> npm install vue npm ERR! код UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! запрос на https://registry.npmjs.org/vue завершился неудачно, причина: невозможно получить сертификат местного эмитента

npm ERR! Полный журнал этого запуска можно найти в: npm ERR!
C: \ Users \ chpr \ AppData \ Roaming \ npm-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> npm ERR!
C: \ Users \ chpr \ AppData \ Roaming \ npm-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log

Команда ниже решила проблему:

npm config set strict-ssl false
Чатругхан Прасад
источник