npm добавить корневой ЦС

Я ищу способ добавить настраиваемый ЦС в NPM, чтобы я мог загружать из места, используя указанный сертификат (внутренний git-сервер), без необходимости уничтожать все проверки ЦС с помощью

npm config set strict-ssl false

Есть ли способ добиться этого или нет? (если нет: дефект уже есть?)


person FrankyBoy    schedule 21.05.2014    source источник


Ответы (2)


Вы можете указать npm на cafile

npm config set cafile /path/to/cert.pem

Вы также можете настроить строку (строки) ca напрямую.

npm config set ca "cert string"

ca также может быть массивом строк сертификата. В вашем .npmrc:

ca[]="cert 1 base64 string"
ca[]="cert 2 base64 string"

Приведенные выше npm config команды сохранят соответствующие элементы конфигурации в вашем ~/.npmrc файле:

cafile=/path/to/cert.pem

Примечание: эти настройки CA переопределят поисковые запросы в реальных центрах сертификации по умолчанию, которые использует npm. Если вы попытаетесь использовать какие-либо общедоступные реестры npm через https, которые не подписаны вашим сертификатом CA, вы получите ошибки.

Если вам нужно поддерживать как общедоступные https-реестры npm, так и ваш собственный, вы можете использовать центр сертификации curl на основе Mozilla. bundle и добавьте сертификат CA в cacert.pem файл:

curl https://curl.haxx.se/ca/cacert.pem > ~/.npm.certs.pem
cat my-ca-cert.pem >> ~/.npm.certs.pem
npm config set cafile ~/.npm.certs.pem

К сожалению, пакет CA npm нельзя редактировать, поскольку он содержится в исходном коде (спасибо, tomekwi), но Компания nitzel предоставила общий метод Node.js для добавления сертификата через переменную среды NODE_EXTRA_CA_CERTS.

Примечание RHEL: если вы используете дистрибутив на основе RHEL и упакованный RHEL nodejs / npm, вы можете использовать стандартный _ 14_ method, поскольку RedHat направляет свои пакеты в системные центры сертификации.

person Matt    schedule 17.01.2015
comment
хотя это действительно запоздалый ответ, я ценю это. Тем временем мы решили проблему, установив сервер sinopia (что, кстати, замечательно) и опубликовав там наши материалы ... потому что npm-зависимости от git в любом случае нехорошо работать. - person FrankyBoy; 17.01.2015
comment
Я нашел вопрос при поиске той же проблемы, поэтому, надеюсь, это поможет кому-то еще, кто придет на этот путь. - person Matt; 17.01.2015
comment
Нет пакета, распространяемого с node, но, похоже, есть их список в источнике: github.com/joyent/node/blob/master/src/node_root_certs.h - person tomekwi; 08.04.2015
comment
URL на основе github устарел. Теперь новый URL-адрес: curl.haxx.se/ca/cacert.pem. - person JE42; 29.09.2016
comment
Это не работает с аналогичной ошибкой с ionic. - person David R; 12.06.2017
comment
Что вы делаете, когда утверждаете, что делаете это, а это по-прежнему не работает? - person Andrew Mortimer; 30.08.2017
comment
Попробуйте NODE_DEBUG=tls,https,http npm -ddd command проверить, имеет ли ваше http-соединение настройку CA и что делает рукопожатие TLS. - person Matt; 03.09.2017
comment
@Matt Я использую cacerts из %jdk%/%jre%/lib/security из Java. Он показывает правильный путь в .npmrc. По-прежнему сохраняется ошибка о npm ERR! fatal: unable to access <URL>: SSL certificate problem: unable to get local issuer certificate. Любая идея об этом, как ее решить? - person Jimit Patel; 08.05.2018
comment
@JimitPatel java имеет собственный формат хранилища ключей для сертификатов. Сертификаты должны быть экспортированы с keytool для использования вне java. - person Matt; 03.06.2018
comment
@Matt спасибо за ответ. Я обнаружил проблему. Я использовал его в своей Android Studio, и по умолчанию он использовал встроенную Java, а не ту, которую я сохранил в своей среде. :) - person Jimit Patel; 03.06.2018
comment
Ссылки мертвы - получение 404 для ca и cafile - person tombags; 11.03.2020

Если Matts Answer вам не помогает:

$env:NODE_EXTRA_CA_CERTS=path\to\certificate.pem; npm install у меня работал в Windows Powershell.


Для DOS / cmd (указано Марком в комментариях)

set NODE_EXTRA_CA_CERTS=C:\\path\\to\\certificate.pem
npm install
person nitzel    schedule 21.05.2019
comment
Как вы указали путь windows с диском? /path/to будет работать только в Linux ... - person Marc; 25.11.2019
comment
Gottit: set NODE_EXTRA_CA_CERTS=C:\\bcp\\cafile.pem (в DOS) - person Marc; 25.11.2019
comment
@Marc PowerShell принимает / и \ (и использует ` вместо \ для экранирования символов) Какая трудность, чтобы избежать ` и \ в markdown ._. - person nitzel; 25.11.2019
comment
Я что-то упускаю или этот ответ не намного лучше принятого? Я не хочу отменять набор по умолчанию, и это тоже не похоже на исходный вопрос. Я просто хочу добавить один сертификат в магазин доверия (сертификат MITM моей компании). - person DavidS; 24.05.2020
comment
В Linux / Unix / OSX: export NODE_EXTRA_CA_CERTS=/path/to/trusted/CA.pem кредит - person This; 04.08.2020
comment
Как установить путь в окнах? .npmrc cafile = c: /folder1/folder2/folder3/caCert.pem или cafile = / folder3 / caCert.pem Конфигурация npm set cafile c: /folder1/folder2/folder3/caCert.pem или npm config set cafile c: / folder3 /caCert.pem - person user3380358; 08.09.2020
comment
@ user3380358 Используйте командные строки в моем ответе. Если вы хотите установить его навсегда, см. Принятый ответ от Matt. Иногда это не помогало мне, поэтому я опубликовал свою альтернативу. - person nitzel; 09.09.2020