Для тех, кто борется за корпоративный брандмауэр, а также проблемы с SSL (не удается получить сертификат локального эмитента), вот несколько шагов, которые вы можете попробовать:
Забудь про SSL
Если вас не интересует SSL, вы можете последовать совету многих предыдущих участников, настроив прокси и изменив реестр на незащищенную версию:
npm config set proxy http://username:password@proxyname:port
npm config set https-proxy http://username:password@proxyname:port
npm config set registry http://registry.npmjs.org/
Вкратце, я понял, что мои учетные данные прокси одинаковы для защищенных и незащищенных запросов (обратите внимание, как я оставил свой протокол как http: // для конфигурации https-proxy ). Это может быть то же самое для вас, а может и нет.
Я хочу сохранить SSL
Если вы хотите сохранить SSL и не хотите его использовать strict-ssl=false
, у вас есть больше работы. Я за корпоративным брандмауэром, и мы используем самозаверяющие сертификаты, поэтому я получаю сообщение об ошибке unable to get local issuer certificate
. Если вы находитесь в той же лодке, что и я, вам нужно будет установить cafile=
опцию в конфигурационном файле npm. Во-первых, вам нужно создать файл PEM, который содержит информацию о ваших самозаверяющих сертификатах. Если вы не знаете, как это сделать, вот инструкции для среды Windows без использования стороннего программного обеспечения:
Нам нужно явно указать, каким сертификатам следует доверять, потому что мы используем самозаверяющие сертификаты. Например, я перешел на сайт www.google.com с помощью Chrome, чтобы получить сертификаты.
В Chrome перейдите в «Проверка» -> «Безопасность» -> «Показать сертификат». Вы увидите все сертификаты, которые разрешают соединение SSL. Обратите внимание, как эти сертификаты являются самозаверяющими. Размытая часть - это моя компания, и мы не являемся сертифицированным органом. Вы можете экспортировать полный путь сертификата в виде файла P7B или экспортировать сертификаты отдельно в виде файлов CER (кодировка base64). Экспорт полного пути как P7B не принесет вам большой пользы, потому что вам, в свою очередь, нужно открыть этот файл в диспетчере сертификатов и все равно экспортировать как отдельные файлы CER. В Windows двойной щелчок по файлу P7B откроет приложение Certificate Manager.
Экспорт в формате CER (Base 64) - это действительно текстовый файл в следующем формате:
-----BEGIN CERTIFICATE-----
MIIGqzCCBZOgAwIBAgITIwAAABWhFPjwukYhTAADAAAAFTANBgkqhkiG9w0BAQUF
ADBFMRMwEQYKCZImiZPyLGQBGRYDY29tMRYwFAYKCZImiZPyLGQBGRYGaXJ2aW5n
b0pvCkNmjWzaNNUg2hYET+pP5nP75aRu+kPRl9UnlQ....rest of certificate...
-----END CERTIFICATE-----
Чтобы создать наш файл PEM, нам просто нужно сложить эти сертификаты друг над другом в один файл и изменить расширение на .pem. Я использовал блокнот, чтобы сделать это.
Вы складываете сертификаты в обратном порядке от пути сертификата. Итак, выше, я бы начал с * .google.com, затем вставил бы под ним Websense, затем выдал CA 1 и т. Д. Таким образом, сертификаты анализируются сверху вниз в поисках подходящего корневого CA. Простое включение Root CA не сработает, но нам также не нужно включать все сертификаты. Из приведенного выше пути мне нужно только включить те сертификаты, которые предшествуют сертификату Websense (выдача CA 1, Policy CA, Root CA).
Как только эти самозаверяющие сертификаты будут сохранены в файле PEM, мы готовы дать команду npm использовать эти сертификаты в качестве нашего доверенного CA. Просто установите файл конфигурации, и вы должны быть готовы к работе:
npm config set cafile "C:\yourcerts.pem"
Теперь, когда установлены прокси-серверы (http и https), а реестр настроен на https://registry.npmjs.org
, вы сможете устанавливать пакеты за корпоративным брандмауэром с самозаверяющими сертификатами, не изменяя strict-ssl
настройки.