VPN、プロキシ、フィルタ

Macで会社のプロキシ証明書がターミナルのツールを妨げる

会社のネットワークの中には、HTTPSの通信を検査するものがあります。プロキシは会社のルート証明書で通信に署名し直すので、その証明書を信頼していないツールは止まります。

対象:現在のすべてのmacOSバージョン。Node.jsのNODE_USE_SYSTEM_CAには、Node.js 22.19、24.6以降が必要です。確認日:2026年10月29日

症状

  • npmやNodeで「self-signed certificate in certificate chain」や「unable to get local issuer certificate」と表示される。
  • GitでHTTPSのリモートに対して「SSL certificate problem」と表示される。
  • Safariではサイトが開くのに、curlやPythonでは開けない。
  • エラーが会社のネットワークやVPNでだけ起きる。

考えられる原因

  • TLSインスペクション。プロキシは、サイトの証明書を会社のルート証明書で署名した証明書に置き換えます。
  • 別々の信頼ストア。SafariはmacOSのキーチェーンを使います。コマンドラインツールの多くは、独自の信頼済み証明書リストを使います。
  • プロキシ設定がない。ターミナルのツールは、システムのプロキシを使うとは限りません。プロキシ変数か、ツール独自の設定が必要です。

確認方法

  1. サーバが送ってくる証明書チェーンを表示します。いちばん上の証明書の発行者を確認します。

    openssl s_client -connect registry.npmjs.org:443 -servername registry.npmjs.org -showcerts </dev/null
  2. curlでTLSハンドシェイクを表示します。

    curl -v https://registry.npmjs.org/ -o /dev/null
  3. 「キーチェーンアクセス」で会社のルート証明書を探します。「システム」キーチェーンで会社名を検索します。

  4. シェルのプロキシ変数を表示します。

    env | grep -i proxy

解決方法

  1. IT部門から会社のルート証明書をPEMファイルでもらいます。出どころのわからない証明書は信頼しないでください。

  2. Node.jsのツールでは、NODE_EXTRA_CA_CERTSでファイルを指定します。設定したら、ツールを起動し直します。

    export NODE_EXTRA_CA_CERTS=~/certs/company-root.pem
  3. Node.js 22.19、24.6以降では、キーチェーンが信頼している証明書を使えます。

    export NODE_USE_SYSTEM_CA=1
  4. npmでは、証明書ファイルを設定します。

    npm config set cafile ~/certs/company-root.pem
  5. Gitでは、証明書ファイルを設定します。

    git config --global http.sslCAInfo ~/certs/company-root.pem
  6. curlでは、--cacertでファイルを指定します。

    curl --cacert ~/certs/company-root.pem https://example.com
  7. IT部門がプロキシを使っている場合は、ターミナルのツールに会社のプロキシを設定します。

    export https_proxy=http://proxy.example.com:8080
  8. strict-sslやhttp.sslVerifyなどの証明書チェックをオフにしないでください。接続が安全ではなくなります。

Kilobatを使う場合

  1. Kilobatの接続チェックは、TLSの失敗を独立したレイヤーとして報告します。直接の経路ではつながらないのにシステムのプロキシ経由ならつながる場合も、そのことを示します。

    kilobat why https://registry.npmjs.org/
  2. そのアプリの環境のプロキシ変数を使うには、--appを追加します。

    kilobat why https://registry.npmjs.org/ --app process:node

よくある質問

npmが失敗するのにSafariではつながるのはなぜですか?

SafariはmacOSのキーチェーンにある証明書を信頼します。npmは、会社の証明書を追加しない限り、Node.jsに含まれる証明書を使います。

strict-sslをfalseにしても安全ですか?

いいえ。レジストリに対する証明書チェックがすべて止まります。代わりに会社のルート証明書を追加してください。

出典

出典は2026年10月29日に確認しました。manページはmacOSに付属のものです。「ターミナル」でman <name>を実行すると開けます。