yarn add 時の YN0001: RequestError: self-signed certificate in certificate chain エラーに対応する

TLS インスペクション環境で yarn add 時に発生する YN0001: RequestError: self-signed certificate in certificate chain エラーの対応方法を紹介します。

やりたいこと

企業の環境等で TLS インスペクションが入っている環境において yarn add でパッケージを追加する際に YN0001: RequestError: self-signed certificate in certificate chain というエラーが発生することがあります。

このエラーは TLS インスペクションが入っていることにより証明書検証でエラーとなっていることがほとんどです。 TLS インスペクションの簡単な説明と、後ほど使用する証明書の特定、取得方法を こちらの記事 で紹介していますので必要であればご参照ください。

本記事ではこのエラーの対応方法を紹介します。

環境

OS
Microsoft Windows 22H2
Node.js
v22.12.0
yarn
v4.5.3

対応方法

証明書検証をオフにする (非推奨)

yarn の設定ファイル .yarnrc.yml で enableStrictSsl オプションを false を設定することで証明書検証をオフにすることができます。ただしあらゆる HTTPS における証明書検証がなされなくなるので、この方法はおすすめしません。

enableStrictSsl: true,
Define whether SSL errors should fail requests or not.
If false, SSL certificate errors will be ignored
- Settings (.yarnrc.yml) | Yarn

一応設定方法について書いておきます。

yarn config set enableStrictSsl false

で設定できます。

➤ YN0000: Successfully set enableStrictSsl to false

とコンソールに表示され、プロジェクトルートの .yarnrc.yml に enableStrictSsl: false が追加されます。

この状態で yarn add でパッケージを追加するとエラーが出なくなっていると思います。

上述した通りセキュリティ的によろしくないので、試した場合は enableStrictSsl オプションを true に戻しておきましょう。

yarn config unset enableStrictSsl
➤ YN0000: Successfully unset enableStrictSsl

とコンソールに表示され、プロジェクトルートの .yarnrc.yml に enableStrictSsl オプションが無くなっていることを確認しましょう。

自己署名証明書を指定する

本質的にはプロキシの自己署名証明書を追加することがあるべき姿です。yarn の設定ファイル .yarnrc.yml で httpsCaFilePath オプションにファイルパスを設定することで追加のルート証明書を指定することができます。

繰り返しになりますが、追加する証明書の特定、取得方法を こちらの記事 で紹介していますので必要であればご参照ください。

httpsCaFilePath: “./exampleCA.pem”,
Path to a file containing one or multiple Certificate Authority signing certificates.
- Settings (.yarnrc.yml) | Yarn

プロジェクトルートからの相対パスで指定可能ですが、絶対パスの方がよいでしょう。またプロジェクトの .yarnrc.yml に設定するとリポジトリ管理している場合他の開発者にも影響を与えてしまうのと、同一端末・ネットワーク環境で作業する場合、他のプロジェクトにもこの設定が必要になるのでユーザーグローバルな .yarnrc.yml に設定するのがよいです。ユーザーグローバルな .yarnrc.yml に設定するには -H オプションを付けます。

以下コマンドで設定できます。

yarn config set httpsCaFilePath "C:\path\to\cert.pem" -H

-H, --home
Update the home configuration instead of the project configuration
- yarn config set | Yarn

➤ YN0000: Successfully set httpsCaFilePath to 'C:\\path\\to\\cert.pem'

とコンソールに表示されるので、念のため以下コマンドで設定されていることを確認しましょう。

yarn config httpsCaFilePath

以下のようにユーザーグローバルの .yarnrc.yml に設定されていれば OK です。

└─ httpsCaFilePath
   ├─ Description: A path to a file containing one or multiple Certificate Authority signing certificates
   ├─ Source: C:\Users\xxxxx\.yarnrc.yml
   └─ Value: 'C:\\path\\to\\cert.pem'

あとがき

TLS インスペクション環境化において yarn add でパッケージを追加する際に発生する YN0001: RequestError: self-signed certificate in certificate chain エラーの対応方法を紹介しました。本編と関係ありませんが yarn のユーザーグローバルを指すオプションが -g とかじゃなくて -H, --home なのが実態とあっていて個人的には好みです。