Ответ 1
Выполнение следующих действий помогло решить проблему:
npm config set strict-ssl false
Я не могу прокомментировать, вызовет ли он какие-либо другие проблемы на данный момент времени. Надеюсь, что это поможет.
Я использую 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
Выполнение следующих действий помогло решить проблему:
npm config set strict-ssl false
Я не могу прокомментировать, вызовет ли он какие-либо другие проблемы на данный момент времени. Надеюсь, что это поможет.
По состоянию на 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
Теперь я просто переключил URL-адрес реестра с https на http. Вот так:
npm config set registry="http://registry.npmjs.org/"
Вам нужно обновить 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
npm config set strict-ssl false -g
Чтобы сохранить его во всем мире
Репозиторий больше не поддерживает самозаверяющие сертификаты. Вам необходимо обновить 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. Хотя в рекомендациях говорится: "Мы приветствуем все конструктивные изменения, но, пожалуйста, сделайте их существенными", изменение было отклонено из-за "Это изменение слишком сильно изменилось в исходном сообщении, исходное значение или намерение сообщения будет потеряно". Думаю, сообщество предпочитает отдельный ответ.
Для тех, кто на mac с той же проблемой и установил npm через homebrew:
brew uninstall npm
затем
brew install npm
Работает для меня по osx (10.9.1)
EDIT: вам может потребоваться brew update
перед установкой npm. Вы также можете сделать brew upgrade
после обновления homebrew. Также может быть полезно запустить brew doctor
, если вы столкнетесь с любыми другими проблемами.
Ошибка 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
, чтобы его импортировать.
В соответствии с предложением вы можете добавить экспортированный сертификат в файл /etc/environment
(Node 7.4+), например:
NODE_EXTRA_CA_CERTS=/etc/pki/ca-trust/source/anchors/yourCerts.pem
В 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 скопируйте файл CRT в /usr/local/share/ca-certificates/
, затем выполните:
sudo update-ca-certificates
В 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
Быстрое и чистое решение (тестирование 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/...
Удалите NPM и снова установите его.
По состоянию на 27 февраля 2014 года npm больше не поддерживает свои самоподписанные сертификаты. http://blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more
В приведенной выше ссылке предлагается обновить NPM с помощью NPM. Это также терпит неудачу с SELF_SIGNED_CERT_IN_CHAIN ...
Отключение SSL кажется очень плохой идеей. npm blog объясняет, что они больше не поддерживают свой самозаверяющий сертификат. Они предлагают модернизировать npm через npm install npm -g
, но я, конечно, получил ту же ошибку SELF_SIGNED_CERT_IN_CHAIN. Поэтому я просто обновил node, который обновил npm вместе с ним. Точная процедура зависит от того, как вы установили node.