本文へスキップ
ecdsa.com
Yarn Classic (1.x); Yarn 4 prints the aliasパッケージマネージャー

エラーメッセージ

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 のエラーをそのまま表示します。通常、レジストリ側に問題はなく、チェーンの行き着く先にある社内またはプロキシのルートがこのマシンにないことが原因です。

発生する理由

修正方法

  1. 1.

    Yarn 1 の cafile を設定する

    Yarn に社内のルートを指定してください(cafile はレジストリへのリクエストでデフォルトのルートを置き換えるため、パブリックルートも含めたバンドルを指定する方法もあります)。

    bash
    yarn config set cafile /etc/ssl/private-ca/corp-root-ca.pem
  2. 2.

    または NODE_EXTRA_CA_CERTS を使う

    Yarn と、この変数が設定されたその他すべての Node.js プロセスについて、Node.js の組み込みリストにルートを追加します。

    bash
    export NODE_EXTRA_CA_CERTS=/etc/ssl/private-ca/corp-root-ca.pem
    yarn install --frozen-lockfile
  3. 3.

    Yarn 4:httpsCaFilePath

    Yarn 4 はこの失敗を「YN0001: RequestError: unable to get local issuer certificate」と表示し、CA ファイルは .yarnrc.yml の httpsCaFilePath から読み込みます。

    yaml
    # Yarn 4: .yarnrc.yml
    httpsCaFilePath: /etc/ssl/private-ca/corp-root-ca.pem
  4. 4.

    ロックファイルが使っているホストを確認する

    resolved の URL が社内のミラーを指している場合、修正すべきなのはレジストリの設定ではなく、そのミラーの証明書かトラストストアです。

    bash
    # Which hosts does the lockfile download from?
    grep -oE 'resolved "https://[^/]+' yarn.lock | sort | uniq -c

関連するエラー

署名エラーデータベースをすべて見る