Claude Code で Unable to connect to API: Self-signed certificate detected や Unable to connect to API: SSL certificate verification failed が出たときの直し方です。結論から言うと、会社のプロキシなどが TLS の通信を検査して自前の証明書に差し替えていて、Claude Code がその発行元(CA)を信頼していないことが原因です。その CA の証明書ファイルを NODE_EXTRA_CA_CERTS で渡せば通ります。
確認環境は Claude Code 2.1.318、macOS 26.6、2026-11-06 です。
症状
次のような表示が出て、以降の依頼が通りません。
API Error: Unable to connect to API: Self-signed certificate detected (SELF_SIGNED_CERT_IN_CHAIN). The certificate comes from an authority Claude Code doesn't trust, usually a TLS-inspecting corporate proxy or a gateway signed by a private CA: set NODE_EXTRA_CA_CERTS to that CA bundle, or add it to the system certificate store · see https://code.claude.com/docs/en/network-config
API Error: Unable to connect to API: SSL certificate verification failed (UNABLE_TO_GET_ISSUER_CERT_LOCALLY). The certificate comes from an authority Claude Code doesn't trust, usually a TLS-inspecting corporate proxy or a gateway signed by a private CA: set NODE_EXTRA_CA_CERTS to that CA bundle, or add it to the system certificate store · see https://code.claude.com/docs/en/network-config
上の 2 つは公式の Error reference に載っている文言です。かっこ内のコードは状況で変わります。後で書くとおり、私の手元では DEPTH_ZERO_SELF_SIGNED_CERT と UNABLE_TO_VERIFY_LEAF_SIGNATURE が出ました。
ログイン時や起動時の接続確認では、同じ原因で別の文言になります。
SSL certificate error (UNABLE_TO_GET_ISSUER_CERT_LOCALLY). If you are behind a corporate proxy or TLS-intercepting firewall, set NODE_EXTRA_CA_CERTS to your CA bundle path, or ask IT to allowlist *.anthropic.com. Run `claude doctor` for details.
古い版(公式によれば v2.1.273 より前)では、どちらも Check your proxy or corporate SSL certificates で終わり、OpenSSL のコードも NODE_EXTRA_CA_CERTS の案内もありませんでした。古い文言で検索してきた方は、更新すると手がかりが増えます。
結論
- 原因は、通信の途中にいる装置(社内プロキシ、セキュリティ製品など)が、Claude Code の知らない CA で署名した証明書を返していること
- 直し方は、その CA の証明書(PEM 形式)を入手して、
NODE_EXTRA_CA_CERTS=/path/to/ca-bundle.pemを付けて起動すること -
NODE_TLS_REJECT_UNAUTHORIZED=0で黙らせるのは避けます。公式が「証明書の検証を丸ごと無効にする」ので使わないよう明記しています
原因
会社のネットワークによっては、外向きの HTTPS を一度プロキシが受けて中身を検査し、自分の CA で署名した証明書を作って、クライアントに見せ直す構成があります(TLS 検査、いわゆる中間者方式です)。ブラウザは、社内 PC に配られた社内 CA を信頼しているので気づきません。一方、Claude Code は OS やブラウザとは別に、自分が持つ信頼リストで検証します。そのため、社内 CA の署名だけが「知らない発行元」として弾かれます。
公式の説明も同じで、「ネットワーク上のプロキシかセキュリティ機器が自前の証明書で TLS を横取りしていて、Claude Code はそれを信頼していない」という書き方です。
issue では、社内プロキシ(TLS 検査)越しで出たという報告が複数あります。
- https://github.com/anthropics/claude-code/issues/25977
- https://github.com/anthropics/claude-code/issues/103680
- https://github.com/anthropics/claude-code/issues/30318
手元で確かめたこと
本物の社内プロキシは用意できないので、同じ状況を手元で作りました。
- ダミーの「社内ルート CA」を
opensslで作る - その CA で署名したサーバ証明書を持つ HTTPS サーバを
127.0.0.1:8443で立てる -
ANTHROPIC_BASE_URL=https://127.0.0.1:8443と、ダミーのANTHROPIC_API_KEYでclaude -p hiを実行する
設定ディレクトリは CLAUDE_CONFIG_DIR で空のものに切り替え、外部には何も送っていません。
1 回目は CA を渡さずに実行し、証明書の検証エラーで止まりました。2 回目は NODE_EXTRA_CA_CERTS に社内 CA の PEM を指定したところ、TLS は通り、先に進んで(ダミーサーバが返した 500 を表示して)終わりました。つまり、NODE_EXTRA_CA_CERTS を付けるだけで証明書の壁は越えられます。
ほかにも次のことが分かりました。
- 自己署名の証明書を直接返すサーバに繋ぐと、
Self-signed certificate detected (DEPTH_ZERO_SELF_SIGNED_CERT)になります。公式の例にあるSELF_SIGNED_CERT_IN_CHAINとは、コードが違うだけで同じ種類の問題です - CA が署名した証明書を返すサーバだと、2.1.318 では
SSL certificate verification failed (UNABLE_TO_VERIFY_LEAF_SIGNATURE)になり、「中間証明書が抜けているサーバなら、運用者がフルチェーンを送るべき」という説明も付きました。公式ドキュメントの例文より少し長い文言です -
NODE_EXTRA_CA_CERTSに存在しないパスを渡すと、Warning: Ignoring extra certs from ...., load failed: No such file or directoryという警告が先に出て、同じ検証エラーが続きます。パスの打ち間違いは、この警告で気づけます - 参考までに
NODE_TLS_REJECT_UNAUTHORIZED=0でも通りました。ただし検証を丸ごと切っているので、中間者に差し替えられても気づけません。試す価値はなく、勧めません
なお、実際の社内プロキシ(Zscaler など)での挙動や、システムの証明書ストアを使う設定は、手元では確認していません。
直し方
1. 社内 CA の証明書(PEM)を入手する
一番確実なのは、情報システム部門に「TLS 検査に使っているルート CA の PEM ファイルをください」と頼むことです。公式の troubleshoot-install でも、ファイルを持っていなければ IT 部門に聞くよう案内されています。
自分の Mac で探すなら、キーチェーンアクセスで社内 CA を見つけて、PEM でエクスポートする方法があります。コマンドなら、次のような形です("Your Corp Root CA" は自分の組織の CA の名前に読み替えます。このコマンドは今回手元では試していません)。
security find-certificate -a -p -c "Your Corp Root CA" /Library/Keychains/System.keychain > ~/corp-ca.pem
2. 環境変数を付けて起動する
macOS / Linux です。
export NODE_EXTRA_CA_CERTS=/path/to/corp-ca.pem
claude
Windows PowerShell です。
$env:NODE_EXTRA_CA_CERTS = 'C:\path\to\corp-ca.pem'
claude
公式の troubleshoot-install にある書き方と同じです。毎回打たなくて済むよう、~/.zshrc などの設定ファイルに export の行を足しておくと便利です。
3. 直ったか確認する
新しいターミナルで claude を起動し、何か 1 つ依頼して、証明書のエラーが出なくなれば完了です。直らなければ、パスが正しいか(先ほどの Ignoring extra certs の警告が出ていないか)を見ます。
直らないとき
- 渡したのが、ルート CA ではなく自分のサーバ証明書だけになっていませんか。プロキシが使っている CA の証明書を渡す必要があります。中間 CA がある構成では、IT 部門に、ルートと中間をまとめた 1 つのバンドルを頼むのが早いです
- そもそもプロキシ経由でしか外に出られない環境なら、
HTTPS_PROXYの設定も要ります。公式の Error reference に、社内プロキシ越しならHTTPS_PROXYを設定する、という案内があります。なお、ターミナルから起動したプロセスは macOS のシステムのプロキシ設定を引き継がない、という整理を issue の調査で見かけました。network-config のページで確認してください - ログイン時の文言には、IT 部門に
*.anthropic.comを許可してもらう、という案内も入っています - OS の時計が大きくずれていても、証明書の検証は失敗します。これは推測ですが、念のため確認する価値はあります
- システムの証明書ストアを使わせる設定(
CLAUDE_CODE_CERT_STOREやNODE_USE_SYSTEM_CA)の名前が、2.1.316 の実行ファイル内の文字列にあります。ただし、公式ドキュメントで確認できたわけではなく、版によって失敗した報告(issue #69387)もあります。まずはNODE_EXTRA_CA_CERTSを試してください - Amazon Bedrock を使う場合、AWS への通信(STS や SSO など)も同じ証明書設定に依存する、と公式にあります
同じ原因で出る別のメッセージ
- ネイティブ版のインストーラ段階では、
TLS connect errorやunable to get local issuer certificateが出ます。公式の対応表では、CA 証明書の更新か社内 CA の設定が案内されています - 証明書ではなく、プロキシに繋がらない場合は、
Couldn't connect through your proxy (ERR_PROXY_TUNNEL)のような別の文言になります。こちらは URL や認証情報、許可されたホストかどうかの確認が先です
Claude Code で出るほかの英文エラーと、それぞれの対処は、早見表にまとめています。
参考
- 公式 Error reference(SSL certificate errors): https://code.claude.com/docs/en/errors#ssl-certificate-errors
- 公式 Network configuration: https://code.claude.com/docs/en/network-config
- 公式 Troubleshoot installation: https://code.claude.com/docs/en/troubleshoot-install
- issue #25977: https://github.com/anthropics/claude-code/issues/25977
- issue #103680: https://github.com/anthropics/claude-code/issues/103680
- issue #30318: https://github.com/anthropics/claude-code/issues/30318
