nodejs “Помилка npm! код SELF_SIGNED_CERT_IN_CHAIN ​​”


79

Я новачок у nodejs та npm. Я намагаюся встановити log4js, і це команда для встановлення:

npm install log4js

Я запускаю це з командного рядка Windows, і через деякий час після обертання маркера з'являється така помилка:

npm ERR! Windows_NT 6.3.9600
npm ERR! argv "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "log4js"
npm ERR! node v0.12.0
npm ERR! npm  v2.5.1
npm ERR! code SELF_SIGNED_CERT_IN_CHAIN

npm ERR! self signed certificate in certificate chain
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <http://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     C:\srv\npm-debug.log

Я спробував зробити, npm config set ca=""як запропоновано тут: http://blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more, але ця помилка все ще з’являється.

Як я можу це вирішити та встановити NPM?



У мене виникла ця проблема через корпоративно встановлений продукт, який називається websense. Це було викрадення сертифікатів. усунення virusвирішеної проблеми
BozoJoe

Відповіді:


178

Відповідно до блогу npm ця проблема не впливає на LTS, тому віддайте перевагу використанню останнього випуску

У старих версіях npm мав би власний підписаний файл ca, файл ca використовувався в безпечному режимі SSL під час встановлення з'єднання, а реєстр npm розгорнув оновлений сертифікат SSL який несумісний із файлом ca старішої версії npm, тому помилка підключення через SSL.

Однак якщо ви зіткнетеся з цією помилкою, будь-який з наведених нижче кроків повинен допомогти вам
1) оновити версію npm

npm install npm -g --ca=null

2) скажіть своїй поточній версії npm використовувати ca node замість вбудованого npm ca

npm config set ca=""


3) ви також можете вимкнути режим strikt-ssl, щоб обійти помилку у старій версії, але ви стираєте захист

npm set strict-ssl false


1
Вирішив навіть моє питання. Все, що мені потрібно запустити як суперкористувачеві ;-)
byJeevan

@geoidesic Для мене це працювало у файлі докера. Спробуйте виконати цю команду за допомогою RUN перед встановленням npm.
Діпак Текчандані,

1
Це невпевнений підхід, що робить вас вразливими до атак MITM. Правильним рішенням є пошук фактично використаних сертифікатів та додавання їх до вашого файлу npm.
HA

3
Це вирішило мою проблему: npm встановив strict-ssl false
Тарун

1
@AkshayVijayJain моя версія npm 6.13.4
Тарун

52

У мене була така сама проблема на Windows 10.

відкрийте windows powerShell і введіть таку команду:

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

Тоді ви можете використовувати:

npm install [your package]

5
Це має бути прийнятою відповіддю. Встановлення false-ssl на false є небезпечним. Дякую за вирішення цього головного болю.
jarodtaylor

Я все ще отримую повідомлення про помилку під час запуску цього cmd.Допомога!
manish kumar

14

Я також новачок у npm. Окрім команд, згаданих у вашому посиланні, я спробував наступне, і це вирішило мої проблеми:

  • npm встановити false-ssl
  • тимчасово відключив McAfee

Посилання: Npm SELF_SIGNED_CERT_IN_CHAIN ​​на Azure


3
Вимкнення SSL ніколи не повинно бути відповіддю. Для цього мають бути певні обхідні шляхи ...
Ендрю Ландсверк,

9
@AndrewLandsverk - це якщо ви стоїте за обмежувальним корпоративним брандмауером.
Cloxure


5

Незважаючи на те, що для StrictSsl встановлено значення false, це загрожує безпеці npm. Я рекомендую не відключати його. Наступні інструкції детально описують публікацію Шрідгара щодо використання cafile. Хоча це написано з точки зору машини Windows 10, його можна адаптувати.

Наша компанія використовує SSL Inpsection через проксі, тому принаймні нам потрібно включити сертифікат SSL Inspection. Наступні вказівки передбачають, що ви можете користуватися сучасним веб-браузером на машині, для якої ви намагаєтесь використовувати зовнішню функцію npm.

  1. З командної консолі запустіть наступне: npm config list
  2. Запишіть значення для реєстру метрик. Це має бути URL-адреса.
  3. Відкрийте браузер за URL-адресою. На момент написання цієї відповіді це https://registry.npmjs.org/
  4. Відкрийте інформацію про сертифікат для сайту. Для Chrome у Windows це передбачає натискання значка навісного замка ліворуч від URL-адреси в адресному рядку та вибір опції Сертифікат .
  5. Перевірте шлях сертифікації. Для мене існує наш корпоративний центр сертифікації та наш сертифікат перевірки SSL.
  6. Завантажте кожен сертифікат як Base64, закодований у файл .cer або .crt.
  7. Скомпілюйте всі сертифікати як є в один файл .cer або .crt.
  8. Помістіть цей файл у папку користувача. Хоча у нас є мережева папка для користувачів, я рекомендую використовувати локальну папку на машині. Зверніть увагу на повний шлях до цього файлу.
  9. З командної консолі запустіть наступне: npm config set cafile "C:\Local\Path\To\cafile4npm.cer"змінення шляху та файлу, зазначених у кроці 8.
  10. Запустіть свою npm installкоманду.

Я ніколи не використовував зображення докера, але, можливо, можу допомогти. Які деталі помилки ви отримуєте?
gregsonian

немає зайвих деталей; така ж помилка, як і в назві OP.
geoidesic

Як зробити цю частину? Завантажте кожен сертифікат як Base64, закодований у файл .cer або .crt. Коли я відкриваю шлях сертифікації, немає можливості завантажити? Повинен бути встановлений правильно? Моя проблема полягає в тому, що справжній непідписаний сертифікат існує в node_modules.
JWP

Дякую. Запуск списку конфігурацій npm показав глобальний / usr / local / etc / npmrc із записом cafile = ..., який зіпсував мій день, поки я не знайшов цю відповідь. Дякую.
HaVonTe

@JohnPeters Якщо натиснути піктограму навісного замка ліворуч від адресного рядка URL-адреси, має бути доступна можливість перегляду сертифікатів. У Windows 10 спливаюче вікно містить 3 вкладки: Загальне, Деталі та Шлях сертифікації. Хоча вкладка Шлях сертифікації відображає всі сертифікати між вами та сервером, саме із вкладки Деталі ви можете завантажити файл. У Windows 10 кнопкою є Копіювати у файл ...
gregsonian

2

Ви також пробували налаштування, що cafileвміщують усі пеми в одному файлі? npm додати кореневий CA

Якщо ви використовуєте проксі у своєму .npmrcфайлі, я запропоную встановити no_proxyзмінну середовища зі значенням вашого<server IP address>


2

У CentOS та інших дистрибутивах Linux вам потрібно налаштувати NPM для використання вашого файлу органів сертифікації:

npm config set cafile "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem" -g

Очевидно, перевірте, чи файл існує та містить усі кореневі системи CA, з якими ви можете зіткнутися (наприклад, корпоративний проксі-сервер).



0

З 27 лютого 2014 року npm більше не підтримує свої самопідписані сертифікати .Наступні варіанти, як рекомендує npm, - це зробити одне з наступного:

Оновіть свою версію npm

npm install npm -g --ca=""

- АБО -

Скажіть своїй поточній версії npm використовувати відомі реєстратори

npm config set ca ""

Оновлення: npm опублікував Додаткову допомогу щодо SELF_SIGNED_CERT_IN_CHAIN ​​та npm з додатковими рішеннями для різних середовищ

Детальніше читайте тут


0

Жодна з наведених відповідей не допомогла мені в ситуації. Винуватцем виявився пакет-агент-база до 6.0.1. Справді, власник зізнався, що розсилає самопідписані сертифікати в тестовій папці свого пакета. Це змусило перевстановити -D та -g, але проблема все ще трапляється.

Я знайшов цей сертифікат, здійснивши пошук у папці node_modules для * .pem.

Все ще працюю над тим, щоб отримати кеші npm, щоб прослухати мене. Звичайно, я манекен, правда?

Я опублікую додаткові висновки.

Знайдене рішення

7.07.2020

Сьогодні наш додаток Angular було оновлено з 8,3 до 10,0. Вгадай що? Помилки зникли. Першопричиною було те, що хтось опублікував непідписаний сертифікат, який зробив це занадто глибоко в бібліотеці модулів NPM. Це було навіть у NPM 6.15!


0

Я спробував тут багато рішень, і жодне з них справді не працювало для мене. Я спробував оновити npm, але отримав або час очікування (коли для реєстру встановлено значення http://registry.npmjs.org/ ), або заборонену відповідь 403 (коли для реєстру встановлено значення http s : //registry.npmjs.org/)

Зрештою, realsing , що моя проблема була викликана бути за проксі - сервером, то , що зробив роботу для мене в кінці кінців , було:

npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080

(кредит: https://stackoverflow.com/a/12832637/4191296 )


0

Ви можете відключити перевірку сертифіката для з'єднань TLS:

NODE_TLS_REJECT_UNAUTHORIZED=0 npm install puppeteer


0

Отримала таку ж помилку при виконанні за допомогою збірки Docker. Однак виконання Powershell було без помилок. Потім змінили файл docker наступним чином (як запропоновано вище):

RUN npm config set ca = ""

RUN npm встановити false-ssl

Це виправило проблему ланцюга сертифікатів.


-1

Я перевстановив node js та angular cli. Це почало працювати !!


1
Хоча це посилання може відповісти на питання, краще включити тут основні частини відповіді та надати посилання для довідки
Праттамеш Детальніше
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.