Перейти к содержимому
ecdsa.com
pnpm 12 (native binary, rustls)Менеджеры пакетов

Сообщение об ошибке

Error: ERR_PNPM_RESOLVING_NPM_RESOLVER_NETWORK_ERROR

Также выводится как

  • Error: ERR_PNPM_PACKAGE_MANAGER_ADD_RESOLVE_LATEST

Код в первой строке зависит от команды: ERR_PNPM_RESOLVING_NPM_RESOLVER_NETWORK_ERROR для pnpm install, ERR_PNPM_PACKAGE_MANAGER_ADD_RESOLVE_LATEST для pnpm add. Цепочка причин под ним выглядит так: «Failed to fetch metadata from <url>: error sending request: client error (Connect): invalid peer certificate: UnknownIssuer»; строки переносятся по ширине 80 символов. pnpm 10 и более ранние версии работают на Node.js и вместо этого выдают коды Node.js, например SELF_SIGNED_CERT_IN_CHAIN или UNABLE_TO_GET_ISSUER_CERT_LOCALLY.

pnpm 12 (native binary, rustls) — registry request over HTTPS fails with "invalid peer certificate: UnknownIssuer"

Что это означает

pnpm 12 не смог получить метаданные пакета из реестра, и цепочка причин, которую он выводит, заканчивается строкой «invalid peer certificate: UnknownIssuer» — это ошибка проверки TLS. pnpm 12 — нативный исполняемый файл, HTTP-клиент которого проверяет сертификаты с помощью rustls, а «UnknownIssuer» — единый код rustls для любой ошибки построения цепочки: неизвестный частный CA, корневой сертификат прокси, отсутствующий промежуточный сертификат или самоподписанный сертификат.

Почему это происходит

Как исправить

  1. 1.

    Задайте cafile в .npmrc

    pnpm читает файлы конфигурации в формате npm; cafile (или параметр ca, в котором сертификат записан прямо в значении) добавляет CA для запросов к реестру.

    ini
    ; .npmrc (project or ~/.npmrc) — read by pnpm as well as npm
    cafile=/etc/ssl/private-ca/corp-root-ca.pem
  2. 2.

    Установите корневой сертификат в хранилище операционной системы

    В нашей проверке pnpm 12 принял корневой сертификат, добавленный через update-ca-certificates, так что корневые сертификаты, развёрнутые ИТ-отделом, работают без дополнительной настройки.

    bash
    # pnpm 12 also trusts the operating system's store
    sudo cp corp-root-ca.pem /usr/local/share/ca-certificates/corp-root-ca.crt
    sudo update-ca-certificates
  3. 3.

    Или используйте NODE_EXTRA_CA_CERTS

    pnpm 12 тоже учитывает эту переменную, так что для Node.js, npm и pnpm достаточно одной настройки.

    bash
    # Honoured by pnpm 12 too, so one variable covers node, npm and pnpm
    export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-root-ca.pem
    pnpm install

Связанные ошибки

Открыть всю базу ошибок подписей