npm ERR! код UNABLE_TO_GET_ISSUER_CERT_LOCALLY


118

Я намагаюся всі способи створення реагувати на додаток. Я спробував з maven, і зараз я намагаюся з системою збирання ящиків-реагуючих додатків від інкубаторів 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викликав для мене цю помилку.
Кайл Бріденстін

Відповіді:


296

Швидке рішення від пошуку в Інтернеті було npm config set strict-ssl false, на щастя, воно спрацювало. Але, як частина мого робочого середовища, я обмежуюсь встановлювати прапор строгого ssl значення false.

Пізніше я знайшов безпечне та робоче рішення,

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

це спрацювало чудово, і я отримав повідомлення про успіх Happy Hacking!, не встановивши прапор строгого ssl значення false.


2
Я теж просто повернувся до використання HTTP-версії сховища NPM (на відміну від register.npmjs.org ), оскільки мій робочий проксі викликав проблеми (оскільки він виступає як MITM, спричиняючи проблеми з підтвердженням сертифікації) Одного разу я зрозумію випустили сертифікат, але мені просто потрібно було завантажити пакет, повісити його!
Роберт Дандон

1
Я думав, у мене вже є цей параметр, але коли я придивився ближче, у мене був https замість http ( register.npmjs.org ). Змінено на http, і воно спрацювало.
Ашиш Баджпай

Для мене я це зробив, але також не міг використовувати, sudoколи бігав npm install aws-sdk. Запуск sudo npm install aws-sdkвикликав для мене цю помилку.
Кайл Бріденстін

Я отримую ту ж помилку , показану на цій посаді , так що я побіг npm config set strict-ssl falseі , npm config set registry http://registry.npmjs.org/ але я все ще отримую помилку при запуску , sudo npm install aws-sdkале коли я опустив sudoчастину і просто побіг npm install aws-sdkвін працював.
Кайл Бріденстін

для мене нічого, крім налаштування npm config set strict-ssl falseне працює. Я вважаю, що це щось, node.jsі npmкоманда повинна вивчити та документувати належну роботу, якщо це не може бути виправлено.
RinoTom

23

Можливо, ваша компанія розшифровує певний трафік і повторно шифрує його своїм сертифікатом (який, напевно, вже є у вашому брелоку чи надійних кореневих сертифікатах)

якщо ви використовуєте вузол 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 використовувати перевірку на звичайні CA, але також дозволяють цей сертифікат, коли він натрапляє на нього

В ідеалі ви могли б використовувати довірені сертифікати вашої системи, але, на жаль, це не так.


Чудово. Голосуйте за ваше детальне пояснення. Допоміг мені краще зрозуміти. Приємна інформація.
vissu

2
У Windows шлях не працював, якщо я не видалив лапки.
Кріс Андерсон

1
У мене ця проблема через BlueCoat, і я маю посилатися на вашу відповідь кожні кілька місяців. Однозначно краще рішення, ніж відключення суворого SSL - дякую!
Джордан Сірий

1
Де я можу знайти .pem файл у Windows. Я шукав у всьому жорсткому диску файл pem, знайдений на кілька рівнів всередині Windows \ System32. Але це не працює
Sanchit Jain

10

Зміна URL-адреси репо-NPM на HTTP працює як швидке виправлення, але я хотів використовувати HTTPS.

У моєму випадку проксі у мого роботодавця (ZScaler) спричиняв проблеми (оскільки він виступає як MITM, викликаючи проблеми з підтвердженням сертифікації)

Я забув, що знайшов сценарій, який допомагає в цьому і Git (для клонування GitHub repos через HTTPS був той самий випуск) і відправив його для мого використання

В основному, це git робить для 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/
  • Зміна налаштувань cafile: npm config set cafile /path/to/your/cert.pem
  • Зупиніть відхиляти невідомі CA: set NODE_TLS_REJECT_UNAUTHORIZED=0

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

Звичайно, встановлення цієї змінної щоразу може викликати роздратування, тому я додав її до свого профілю bash, щоб вона була встановлена ​​щоразу, коли я відкриваю термінал. Якщо у вас ще немає ~/.bash_profileфайлу, створіть його. Потім в кінці цього файлу додайте export NODE_EXTRA_CA_CERTS=path/to/your/cert.pem. Потім видаліть налаштування файлів у файлі .npmrc.


Четвертий варіант був шармом; 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
Існує властивий ризик зробити це, якщо ви станете жертвою недоброзичливої ​​атаки "людина-посередині", пакет міг бути змінений під час завантаження.
Алекс Кейсміт

@AlexKeySmith Ви праві. Однак шанси досить низькі. Це може бути єдиним варіантом для деяких. Caveat Emptor
Джейсон Гейгер

1

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


0

Наведений нижче код відмінно працював для мене, тут роблять http лише замість https

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

0

У моєму випадку я в якийсь момент встановив свою глобальну конфігурацію, щоб використовувати cert, який був призначений для проекту.

npm config list

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

Я відкрив файл, вилучив рядок і npm installзнову працював.


0

помилка нижче

PS C: \ Користувачі \ chpr \ Документи \ GitHub \ vue-nwjs-hours-tracking> npm встановити 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: \ Користувачі \ chpr \ AppData \ Роумінг \ npm-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log PS C: \ Користувачі \ chpr \ Документи \ GitHub \ vue-nwjs-hours-tracking> PS C: \ Користувачі \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> npm ERR!
C: \ Користувачі \ chpr \ AppData \ Роумінг \ npm-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log

Нижче команда вирішила проблему:

npm config set strict-ssl false
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.