Сообщение об ошибке
error Error: self-signed certificate in certificate chain
Также выводится как
- error Error: self signed certificate in certificate chain
Yarn 1.x выводит «error Error: …», а затем трассировку стека Node.js (at TLSSocket.onConnectSecure …). Node.js 16 и более ранние версии пишут «self signed». Yarn 4 сообщает об ошибках TLS в собственном формате: «➤ YN0001: RequestError: <reason>».
Yarn Classic (1.x) — registry request over HTTPS
Что это означает
Yarn Classic не смог проверить сертификат реестра: цепочка заканчивается самоподписанным корневым сертификатом, которому Node.js не доверяет. Yarn выводит ошибку Node.js как есть, с трассировкой стека под ней. В корпоративной сети это классический признак прокси с инспекцией TLS, корневому сертификату которого доверяет браузер, но не Node.js.
Почему это происходит
Прокси с инспекцией TLS переподписывает registry.yarnpkg.com
частоКорпоративные прокси предъявляют сертификаты, цепочка которых ведёт к их собственному корневому сертификату; ОС ему доверяет, а Node.js — нет.
Частный реестр отправляет собственный корневой сертификат
иногдаВнутренние реестры с корпоративными сертификатами: корневой сертификат из цепочки всё равно должен быть доверенным на клиенте.
Node.js игнорирует хранилище доверенных сертификатов ОС
иногдаYarn работает на Node.js, а тот использует встроенный список корневых сертификатов, если не указать иное.
Как исправить
- 1.
Задайте cafile в Yarn 1
Команда yarn config set cafile заставляет Yarn проверять сертификат реестра по указанному PEM-файлу; как и аналогичная настройка npm, она заменяет корневые сертификаты по умолчанию для запросов к реестру.
bash # Yarn 1.x setting (stored in ~/.yarnrc) yarn config set cafile /etc/ssl/private-ca/corp-proxy-root.pem yarn config get cafile - 2.
Или используйте NODE_EXTRA_CA_CERTS
Переменная добавляет корневой сертификат к встроенному списку Node.js для Yarn и всех остальных инструментов на Node.js в этом окружении.
bash export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-proxy-root.pem yarn install - 3.
Yarn 4: httpsCaFilePath
Современный Yarn читает httpsCaFilePath из .yarnrc.yml; Yarn 4 отказывается запускаться, если находит устаревший ключ caFilePath.
yaml # Yarn 4 (Berry): .yarnrc.yml — Yarn 4 rejects the old caFilePath key httpsCaFilePath: /etc/ssl/private-ca/corp-proxy-root.pem - 4.
Временная диагностика: strict-ssl false
Позволяет убедиться, что проблема только в доверии. Пакеты запускают скрипты установки, поэтому отключённая проверка открывает дорогу подменённым пакетам; удалите настройку сразу после теста.
bash # Temporary diagnostic only; revert immediately afterwards yarn config set strict-ssl false && yarn install; yarn config delete strict-ssl