Ошибка получения: "Ошибка: ошибка SSL: SELF_SIGNED_CERT_IN_CHAIN" при использовании npm

Я использую npm v1.0.104/ node 0.6.12 на ubuntu - я получаю ошибку, скопированную ниже, при попытке установить какие-либо новые модули через npm (я тестировал socket.io раньше, используя http, а не https, хотя и интересно, могло ли это привести к проблеме с сертификатами npm/unsigned). Ошибка появляется, когда npm пытается разрешить URL-адрес https://registry.npmjs.org. В любом случае я могу проигнорировать ошибку или, возможно, найти/добавить сертификат в доверенное хранилище, чтобы продолжить использование 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!     <[email protected]>
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

Выполнение следующих действий помогло решить проблему:

npm config set strict-ssl false

Я не могу прокомментировать, вызовет ли он какие-либо другие проблемы на данный момент времени. Надеюсь, что это поможет.

Ответ 2

По состоянию на 27 февраля 2014 года npm больше не поддерживает свои самоподписанные сертификаты. Следующие параметры, как рекомендовано npm, состоит в том, чтобы выполнить одно из следующих действий:

Обновите версию npm

npm install npm -g --ca=""

- ИЛИ -

Сообщите текущей версии npm для использования известных регистраторов

npm config set ca ""

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



Вам может потребоваться или не нужно добавлять sudo к рекомендациям.

Другие опции

Кажется, что у людей возникают проблемы с использованием рекомендаций npm, так что вот некоторые другие возможные решения.

Обновить Node
Получение этой ошибки может предполагать, что у вас установлена ​​более старая версия node, которая, естественно, поставляется с более старой версией 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

Ответ 3

Теперь я просто переключил URL-адрес реестра с https на http. Вот так:

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

Ответ 4

Вам нужно обновить 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

Ответ 5

npm config set strict-ssl false -g

Чтобы сохранить его во всем мире

Ответ 6

Репозиторий больше не поддерживает самозаверяющие сертификаты. Вам необходимо обновить 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. Хотя в рекомендациях говорится: "Мы приветствуем все конструктивные изменения, но, пожалуйста, сделайте их существенными", изменение было отклонено из-за "Это изменение слишком сильно изменилось в исходном сообщении, исходное значение или намерение сообщения будет потеряно". Думаю, сообщество предпочитает отдельный ответ.

Ответ 7

Для тех, кто на mac с той же проблемой и установил npm через homebrew:

brew uninstall npm

затем

brew install npm

Работает для меня по osx (10.9.1)

EDIT: вам может потребоваться brew update перед установкой npm. Вы также можете сделать brew upgrade после обновления homebrew. Также может быть полезно запустить brew doctor, если вы столкнетесь с любыми другими проблемами.

Ответ 8

Ошибка 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 за корпоративным веб-прокси

Если вы доверяете хосту, вы можете экспортировать самозаверяющий сертификат из цепочки и импортировать их в систему, поэтому они помечены как надежные.

Это может быть достигнуто путем проверки сертификатов (change example.com в npm repo, которая не работает на основе npm-debug.log):

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

затем сохраните содержимое сертификата (между BEGIN и END) в файл .crt, чтобы его импортировать.

Linux

В соответствии с предложением вы можете добавить экспортированный сертификат в файл /etc/environment (Node 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: certutil -addstore -f "ROOT" new-root-certificate.crt


См. также: npm - Устранение неполадок - Ошибка SSL

Ответ 9

Быстрое и чистое решение (тестирование 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 fooobar.com/questions/32336/...

Ответ 10

Удалите NPM и снова установите его.

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

В приведенной выше ссылке предлагается обновить NPM с помощью NPM. Это также терпит неудачу с SELF_SIGNED_CERT_IN_CHAIN ​​...

Ответ 11

Отключение SSL кажется очень плохой идеей. npm blog объясняет, что они больше не поддерживают свой самозаверяющий сертификат. Они предлагают модернизировать npm через npm install npm -g, но я, конечно, получил ту же ошибку SELF_SIGNED_CERT_IN_CHAIN. Поэтому я просто обновил node, который обновил npm вместе с ним. Точная процедура зависит от того, как вы установили node.