помилка отримання: 'Помилка: помилка SSL: SELF_SIGNED_CERT_IN_CHAIN' під час використання npm


292

Я використовую npm v1.0.104 / node 0.6.12 в ubuntu - я отримую помилку, скопійовану нижче під час спроби встановлення будь-яких нових модулів через npm (я тестував socket.io раніше за допомогою http, а не https, хоча мені цікаво, чи могло це зробити призвели до проблеми з npm / непідписаними certs). Помилка з'являється, коли npm намагається вирішити URL-адресу " https://registry.npmjs.org ". Чи все-таки я можу проігнорувати помилку або, можливо, знайти / додати cert до надійного магазину, щоб продовжувати використовувати npm.

Буде оцінено будь-яке розуміння того, що потрібно зробити для вирішення проблеми (я вважаю за краще вирішити проблему через конфігурацію, а не повторну інсталяцію, якщо це можливо).

Помилка: "Помилка: помилка SSL: SELF_SIGNED_CERT_IN_CHAIN"

Повне повідомлення:

npm ERR! Error: SSL Error: SELF_SIGNED_CERT_IN_CHAIN
npm ERR!     at ClientRequest.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/main.js:252:28)
npm ERR!     at ClientRequest.emit (events.js:67:17)
npm ERR!     at HTTPParser.onIncoming (http.js:1261:11)
npm ERR!     at HTTPParser.onHeadersComplete (http.js:102:31)
npm ERR!     at CleartextStream.ondata (http.js:1150:24)
npm ERR!     at CleartextStream._push (tls.js:375:27)
npm ERR!     at SecurePair.cycle (tls.js:734:20)
npm ERR!     at EncryptedStream.write (tls.js:130:13)
npm ERR!     at Socket.ondata (stream.js:38:26)
npm ERR!     at Socket.emit (events.js:67:17)
npm ERR! Report this *entire* log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>
npm ERR! 
npm ERR! System Linux 2.6.38-13-generic
npm ERR! command "node" "/usr/bin/npm" "install" "jed"
npm ERR! node -v v0.6.12
npm ERR! npm -v 1.0.104

1
Не видаляйте суворий SSL. Подивіться на stackoverflow.com/a/16534065
nolim1t

15
З 27 лютого 2014 року npm більше не підтримує свої самопідписані сертифікати. Додаткову інформацію див. У блозі npm або останній відповіді нижче.
Кевін Рейлі

1
Якщо у вас виникли проблеми з AWS Elastic Beanstalk, рішення можна знайти тут: stackoverflow.com/questions/22096459/…
Гійом Фландр,

1
nolim1t : це не вирішує причину проблеми, а Кевін : команди в публікації блогу неповні. Дивіться stackoverflow.com/a/22099006/106302 про команди, які працювали для мене.
Ми всі Моніка

1
@ali БУДЬ ЛАСКА змінити "Прийнятий відповідь" Ця проблема з'являється через оновлення npm, а не проблема з SSL. Вимкнення SSL - BAD, а тим більше, що на даний момент правильною відповіддю є оновлення npm. Відповідь Кевіна Рейлі має бути прийнятою відповіддю. Спасибі.
Mikezx6r

Відповіді:


391

Виконання наведеного нижче допомогло вирішити проблему:

npm config set strict-ssl false

Я не можу коментувати, чи це спричинить якісь інші проблеми в цей час. Сподіваюся, це допомагає.


39
замість цього запустіть "npm config set ca null", ігнорування ssl помилок - погана ідея
alex

6
@SnowInferno SSL також гарантує, що ви спілкуєтесь із реальним registry.npmjs.org. Хтось може потенційно встановити шкідливі пакети.
adotout

58
Це брудно неправильно. Чому ви навіть турбуєтесь використовувати SSL, якщо кожен раз це робить одне, що вам належить зробити, ви вимикаєте його? "Будь-який час ігнорування помилки призводить до успіху, розробники збираються робити саме це."
djechlin

20
Будь ласка, не ігноруйте проблеми ssl, оскільки помилка є з дуже вагомої причини. Також трохи пошуку призвели до наступного твіту, який посилається на офіційне рішення вашої проблеми (оновлення npm): twitter.com/npmjs/status/439279809307242496
Thomas Vervest,

41
Мою проблему викликав проксі, який я позаду, "npm config set ca null" і "npm config set ca" "" все-таки давали мені ту ж помилку, але видалення SSL працювало чудово. Іноді добра практика не так важлива, як те, що насправді працює.
Cory Schulz

220

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

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

npm install npm -g --ca=""

- АБО -

Скажіть свою поточну версію npm, щоб використовувати відомі реєстратори

npm config set ca ""

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



Можливо, вам не знадобиться надавати sudoрекомендації.


Інші варіанти

Здається, що у людей виникають проблеми з використанням рекомендацій npm, тому ось деякі інші потенційні рішення.

Сам Оновлення Оновлення
Отримавши цю помилку, можливо, ви вважаєте, що у вас є старіша версія вузла, яка, природно, поставляється зі старшою версією npm. Одне рішення - оновити свою версію Node. Це, мабуть, найкращий варіант, оскільки він оновлює вас та виправляє наявні помилки та вразливості.

Процес тут залежить від того, як ви встановили Node, вашу операційну систему та інше.

Оновлення npm
Оскільки ви, ймовірно, потрапили сюди під час спроби installпакету, можливо, це npm install npm -gможе вийти з тієї самої помилки. Якщо це так, використовуйте updateзамість цього. Як запропонував Нісант Соян:

npm update npm -g

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

npm config set ca ""
npm install npm -g
npm config delete ca

10
Найпростіше рішення - це, мабуть, завантажити останню версію самого Nodejs, вона включає в себе нову версію npm, коли ця проблема вирішена. Жодна з наведених вище команд не працювала для мене.
Strille

1
Я працюю з цим рішенням, оскільки це перше, що не ігнорує ssl (або встановивши чек на false у config, або використовуючи замість нього http). Дякую!
hcpl

12
npm install npm -g також дає мені помилку SELF_SIGNED_CERT_IN_CHAIN
Anders Bornholm

3
Якщо це не працює, npm config set ca ""спочатку зробіть , потім оновіть, а потім скасуйте зміну конфігурації. Дивіться: stackoverflow.com/a/22099006/106302
Ми всі Моніка

1
@Redsandro sudoзмінює користувача, -gпрапор встановлює, якщо встановити глобально для цього користувача або просто локально node_modules.
Радек

68

Наразі я просто переключив URL-адресу реєстру з https на http. Подобається це:

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

1
Працювало як шарм для мене. Я не хотів втрачати оригінальний CA або змусити його ігнорувати SSL-помилки.
SnowInferno

Працювали чудово. Дякую!
Мухаммед базилік

13
Вимкнення безпеки не може бути рішенням!
Алессандро Пеццато

1
Раніше я цим користувався, але чомусь переключення його на "https: //" з "http: //" змусило роботу знову працювати.
kshreve

Спробувавши все інше рішення, ця робота для мене нарешті :-)
Swapnil Kadu

49
npm config set strict-ssl false -g

Щоб зберегти його в усьому світі


Це робить мені сумнозвісну cb() never called!помилку npm
Джеремі

Після цього налаштування я отримую нижче помилки npm ERR! код E401 npm ERR! Неможливо підтвердити автентифікацію, потрібно: Переговори, NTLM npm ERR! Повний журнал цього запуску можна знайти у: npm ERR! C: \ BuildAgent \ npm-cache_logs \ 2019-06-24T10_23_46_563Z-debug.log
Шамі Куреші

31

Вам потрібно оновити npm.

// Do this first, or the upgrade will fail
npm config set ca ""

npm install npm -g

// Undo the previous config change
npm config delete ca

Можливо, вам буде потрібно префіксувати ці команди за допомогою sudo.

Джерело: http://blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more


@ Олівер Зальцбург: ре. ваше редагування: в OS XI не думаю, що sudoце взагалі потрібно, і лише префіксація команди оновлення sudoдля мене добре працювала. YMMV.
Ми всі Моніка

Ах, це працювало для мене. Дякуємо за конкретні вказівки щодо скасування зміни конфігурації (тому мені не довелося її викопувати)!
Метт

Цікаво. Я змінив лише після тестування цього на сервері Debian. Мені подобається поточна редакція, хоча;)
Der Hochstapler

Ubuntu / Debian потребують додаткового посилання, див. Мою відповідь нижче.
Редсандро

2
Це має бути прийнятим рішенням. Це не вимикає безпеку і є "офіційним" рішенням, описаним у блозі npm.
Алессандро Пеццато

21

Помилка SELF_SIGNED_CERT_IN_CHAINозначає, що у вас є сертифікат самопідписання у ланцюжку сертифікатів, якому система, як правило, не довіряє.

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

Це, можливо, пов’язано або з:

  • спеціальна адреса сховища, яка не має відповідного сертифіката,

  • корпоративна мережа з прозорим проксі.

    Якщо ви стоїте за корпоративним веб-проксі, вам слід налаштувати правильні змінні HTTP_PROXY/ HTTPS_PROXYсередовища або встановити їх за допомогою npm:

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

    Див. Як встановити Node.js і Npm за корпоративним веб-проксі

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

Цього можна досягти, перевіривши сертифікати за допомогою (змінити example.comна npm repo, який не працює на основі npm-debug.log):

openssl s_client -showcerts -connect example.com:443 < /dev/null

потім збережіть вміст сертифіката (між BEGINі END) у .crtфайл, щоб імпортувати його.

Linux

За пропозицією , ви можете додати експортований сертифікат у /etc/environmentфайл (Вузол 7.4+), наприклад:

NODE_EXTRA_CA_CERTS=/etc/pki/ca-trust/source/anchors/yourCer‌​ts.pem

CentOS

На CentOS 5 це можна додати у /etc/pki/tls/certs/ca-bundle.crtфайл, наприклад

ex +'g/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq | sudo tee -a /etc/pki/tls/certs/ca-bundle.crt
sudo update-ca-trust force-enable
sudo update-ca-trust extract
npm install

Примітка. Щоб експортувати лише перший сертифікат, видаліть його gна початку.

У CentOS 6 файл сертифіката можна скопіювати /etc/pki/ca-trust/source/anchors/.

Ubuntu / Debian

В Ubuntu / Debian скопіюйте файл CRT, /usr/local/share/ca-certificates/ а потім запустіть:

sudo update-ca-certificates

macOS

У macOS можна запускати:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/foo.crt

Windows

У Windows: certutil -addstore -f "ROOT" new-root-certificate.crt


Дивіться також: npm - Виправлення неполадок - SSL Error


1
> Якщо це так, вам потрібно експортувати самопідписаний сертифікат з ланцюга та імпортувати їх у систему, щоб вони позначені як надійні. - Робить фокус для мене.
dmi3y

2
Чудово! Це також допомагає додати NODE_EXTRA_CA_CERTS = / etc / pki / ca-trust / source / anchors / yourCerts.pem до / etc / середовищі. Вузол 7.4 і більше враховує це
ph4r05

9

Поставлення цього перед командою, здається, працює NODE_TLS_REJECT_UNAUTHORIZED=0. колишній:NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

Найкраще було б з’ясувати, як змусити вузол бачити самопідписаний сертифікат як дійсний. Пропозиція строгого ssl вище для мене чомусь не спрацювала. Якщо ви розумієте наслідки безпеки та потребуєте тимчасового швидкого виправлення, саме це я виявив у деяких випадкових проблемах з github під час пошуку помилки Google.


1
для Windows використовуйте "встановити NODE_TLS_REJECT_UNAUTHORIZED = 0". А потім працює як шарм !!
Тарун

8

Репозиторій більше не підтримує самопідписані сертифікати. Вам потрібно оновити npm.

// Disable the certificate temporarily in order to do the upgrade
npm config set ca ""

// Upgrade npm. -g (global) means you need root permissions; be root 
// or prepend `sudo`
sudo npm install npm -g

// Undo the previous config change
npm config delete ca

// For Ubuntu/Debian-sid/Mint, node package is renamed to nodejs which 
// npm cannot find. Fix this:
sudo ln -s /usr/bin/nodejs /usr/bin/node

Вам потрібно відкрити новий термінальний сеанс, щоб використовувати оновлений npm.

Джерело: Спочатку це була редакція на відповідь jnylen . Хоча в керівництві сказано: "Ми вітаємо всі конструктивні зміни, але, будь ласка, зробіть їх істотними", редагування було відхилено через "Це редагування занадто сильно змінюється в початковій публікації; початкове значення або намір публікації буде втрачено". Я думаю, що громада вважає за краще окрему відповідь.


Це працювало для мене. Однак мені не потрібен остання команда: sudo ln -s /usr/bin/nodejs /usr/bin/node.
абсинс

1
Це, мабуть, залежить від того, встановлено ви з офіційних сховищ Ubuntu, сторонніх сховищ (для нової версії) або складено самостійно (для новітньої версії).
Редсандро

7

Для тих, хто на Mac з тим самим випуском і встановив npm через homebrew :

brew uninstall npm

тоді

brew install npm

Для мене працює на OSX (10.9.1)

EDIT : Можливо, вам знадобиться brew updateперед встановленням npm. Ви також можете зробити brew upgradeпісля оновлення домашньої кави. Також може бути корисно запустити, brew doctorякщо ви зіткнулися з будь-якими іншими проблемами.


4

Швидке та чисте рішення (перевірено linux) (Після стомленого 27 лютого 2014 р.)


Видаліть npm

npm rm npm -g

Встановити npm (нова URL-адреса - www.npmjs.org замість npmjs.org )

curl https://www.npmjs.org/install.sh | sh

Порада : як встановити node.js у Linux https://stackoverflow.com/a/22099363/333061


Команда більше не працює через переспрямування 301, але ви все одно можете ввести https://www.npmjs.org/install.shсвій веб-переглядач і завантажити його, перш ніж запустити його вручну.
svassr

Або запустіть кучері з прапором -L
Еван Корделл

попередня curl https://npmjs.org/install.shкоманда переспрямовується на https://www.npmjs.org/install.shте, тому curl https://www.npmjs.org/install.sh | shпрацює безшовно. гаразд, щоб встановити відтепер маленький падаван. :)
Ігор Парра

2

Видаліть NPM та встановіть його знову.

З 27 лютого 2014 року npm більше не підтримує свої самопідписані сертифікати. http://blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more

Посилання вище пропонує модернізацію NPM за допомогою NPM. Це також не вдається з SELF_SIGNED_CERT_IN_CHAIN ​​...


2

Вимкнення SSL видається дуже поганою ідеєю. Блог npm пояснює, що вони більше не підтримують свою підписану програму. Вони пропонують оновити npm через npm install npm -g, але я, звичайно, отримав ту саму помилку SELF_SIGNED_CERT_IN_CHAIN. Тому я щойно оновив вузол, який оновив npm разом з ним. Точна процедура залежить в першу чергу від того, як ви встановили вузол.

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