Ошибка установки npm - не удалось получить сертификат локального эмитента

Я получаю unable to get local issuer certificate ошибку unable to get local issuer certificate при выполнении установки npm:

typings ERR! message Unable to read typings for "es6-shim". You should check the
 entry paths in "es6-shim.d.ts" are up to date
typings ERR! caused by Unable to connect to "https://raw.githubusercontent.com/D
efinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/es6-shim
/es6-shim.d.ts"
typings ERR! caused by unable to get local issuer certificate

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

Существует проблема обсуждается здесь, который говорит об использовании CA файлы, но это немного выше моего понимания, и я не уверен, что с этим делать.

Я нахожусь за корпоративным брандмауэром, но я могу без проблем получить доступ к URL в браузере.

Есть ли у кого-нибудь дальнейшее понимание этой проблемы и какие есть возможные решения?

Я задаюсь вопросом о возвращении к узлу 0.12 тем временем :(

Ответ 1

Параметры можно настроить с помощью конфигурационного файла ~/.typingsrc. (~ означает ваш домашний каталог)

После обнаружения этой проблемы в github: https://github.com/typings/typings/issues/120, я смог взломать эту проблему, создав ~/.typingsrc и установив эту конфигурацию:

{
  "proxy": "http://<server>:<port>",
  "rejectUnauthorized": false
}

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

Это не настоящее решение, но для typings было достаточно, чтобы игнорировать проблемы корпоративного брандмауэра, чтобы я мог продолжать работать. Я уверен, что там есть лучшее решение.

Ответ 3

Здесь обсуждается проблема, которая говорит об использовании CA файлов, но она немного за пределами моего понимания, и я не уверен, что с этим делать.

Это не так уж сложно, если вы знаете, как! Для Windows:

Используя Chrome, перейдите на корневой URL, на который жалуется NPM (так что https://raw.githubusercontent.com в вашем случае). Откройте инструменты разработчика и перейдите в Security-> Просмотр сертификата. Проверьте путь сертификации и убедитесь, что вы на верхнем уровне сертификата, если не открыть тот. Теперь перейдите в "Детали" и экспортируйте сертификат с помощью "Копировать в файл...".

Вы должны преобразовать это из DER в PEM. Есть несколько способов сделать это, но самый простой способ, который я нашел, - это онлайн-инструмент, который легко найти по релевантным ключевым словам.

Теперь, если вы откроете ключ в вашем любимом текстовом редакторе, вы должны увидеть

-----BEGIN CERTIFICATE----- 

yourkey

-----END CERTIFICATE-----

Это формат, который вам нужен. Вы можете сделать это для столько ключей, сколько вам нужно, и объединить их все в один файл. Я должен был сделать github и ключи реестра npm в моем случае.

Теперь просто отредактируйте ваш .npmrc так, чтобы он указывал на файл, содержащий ваши ключи, вот так

cafile=C:\workspace\rootCerts.crt

Я лично обнаружил, что это лучше работает за нашим корпоративным прокси-сервером, в отличие от опции strict-ssl. YMMV.

Ответ 4

Просто поместите ниже комментарии, используя командную строку.

Его 100% успешно решено

-npm config set strict-ssl false

Ответ 5

Отказ от ответственности: это решение менее безопасно, плохая практика, не делайте этого. У меня было двойное сообщение об ошибке - я за корпоративным VPN/firewall. Мне удалось решить эту проблему, добавив файл .typingsrc в мой каталог пользователя (C:\Users\MyUserName\.typingsrc в Windows). Конечно, каждый раз, когда вы обходите SSL, вы должны обращаться к своим системным администраторам, чтобы решить проблему с сертификатом.

Измените URL-адрес реестра с https на http, и, как видно из ответа nfiles выше, установите для rejectUnauthorized значение false.

.typingsrc (помещается в каталог проекта или в корневой каталог пользователя)

{
     "rejectUnauthorized": false,
     "registryURL": "http://api.typings.org/"
}

При желании добавьте свой токен github (я не добился успеха, пока не добавил это тоже.)

{
    "rejectUnauthorized": false,
    "registryURL": "http://api.typings.org/",
    "githubToken": "YourGitHubToken"
}

Инструкции по настройке токена GitHub см. на странице https://github.com/blog/1509-personal-api-tokens.

Ответ 6

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

У меня та же ошибка

PhantomJS не найден в PATH
Загрузка https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-windows.zip
Сохранение в C:\Users\Sam\AppData\Local\Temp\phantomjs\phantomjs-2.1.1-windows.zip
Прием...

Ошибка при выполнении запроса.
Ошибка: невозможно получить сертификат локального эмитента
в TLSSocket. (_Tls_wrap.js: 1105: 38)
на emitNone (events.js: 106: 13)
на TLSSocket.emit(events.js: 208: 7)
в TLSSocket._finishInit (_tls_wrap.js: 639: 8)
на TLSWrap.ssl.onhandshakedone(_tls_wrap.js: 469: 38)

Итак, после прочтения ошибки.

Просто скачал файл вручную и поместил его по нужному пути. т.е.

C:\Users\Sam\AppData\Local\Temp\phantomjs\

Это решило мою проблему.

    PhantomJS not found on PATH                                                                                                
Download already available at C:\Users\sam\AppData\Local\Temp\phantomjs\phantomjs-2.1.1-windows.zip                    
Verified checksum of previously downloaded file                                                                            
Extracting zip contents