Сообщение об ошибке
error Error: unable to get local issuer certificate
Также выводится как
- YN0001: RequestError: unable to get local issuer certificate
Yarn 1.x выводит «error Error: unable to get local issuer certificate», а затем трассировку стека Node.js. Если реестр отправляет только конечный сертификат, вместо этого выводится «unable to verify the first certificate».
Что это означает
Yarn Classic получил от реестра цепочку сертификатов (конечный и промежуточный), но Node.js не доверяет корневому сертификату, стоящему над ней. Yarn выводит ошибку Node.js без изменений. С реестром обычно всё в порядке: на этой машине нет корневого сертификата компании или прокси, к которому ведёт цепочка.
Почему это происходит
Частный реестр с сертификатом от корпоративного CA
частоArtifactory, Nexus или Verdaccio с сертификатами от внутреннего CA, корневой сертификат которого неизвестен Node.js.
Прокси с инспекцией TLS отправляет свой выпускающий промежуточный сертификат
частоПрокси, которые отправляют конечный и промежуточный сертификаты, но не свой корневой, приводят к этому коду, а не к «self-signed certificate in certificate chain».
Lock-файл указывает на другой хост реестра
иногдаВ yarn.lock хранятся полные URL архивов (tarball). Если lock-файл создан при работе с частным зеркалом, пакеты продолжают скачиваться с этого хоста, даже когда настройка реестра меняется.
Как исправить
- 1.
Задайте cafile в Yarn 1
Укажите в Yarn корневой сертификат компании (или пакет сертификатов, в который входят и публичные корневые сертификаты, поскольку cafile заменяет сертификаты по умолчанию для запросов к реестру).
bash yarn config set cafile /etc/ssl/private-ca/corp-root-ca.pem - 2.
Или используйте NODE_EXTRA_CA_CERTS
Переменная добавляет корневой сертификат к встроенному списку Node.js для Yarn и для любого другого процесса Node.js, запущенного с этой переменной.
bash export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-root-ca.pem yarn install --frozen-lockfile - 3.
Yarn 4: httpsCaFilePath
Yarn 4 выводит эту ошибку как «YN0001: RequestError: unable to get local issuer certificate» и берёт файл CA из httpsCaFilePath в .yarnrc.yml.
yaml # Yarn 4: .yarnrc.yml httpsCaFilePath: /etc/ssl/private-ca/corp-root-ca.pem - 4.
Проверьте, какие хосты указаны в lock-файле
Если URL в полях resolved указывают на внутреннее зеркало, исправлять нужно сертификат этого зеркала или ваше хранилище доверенных сертификатов, а не настройку реестра.
bash # Which hosts does the lockfile download from? grep -oE 'resolved "https://[^/]+' yarn.lock | sort | uniq -c