はじめに
Claude Code は Windows ネイティブでも動作するようになったが、Docker 連携やパス解決の安定性を考えると WSL2 (Ubuntu等) での動作が推奨される。(by社外の有識者やAI)
しかし、独自のルート証明書を差し込む社内プロキシ環境では、curl、git、nvm、npm の各レイヤーで SSL エラーが発生した。
原因としては、公式の install.sh は、結局は内部で nvm をダウンロードして node を入れているのだが、
curl -fsSL https://claude.ai/install.sh | bash
その際に証明書の設定が引き継がれず、証明書エラーになる、ということらしい。
本記事では、備忘として、これらを突破して環境構築する手順を解説する。
ステップ1:WSL2 に社内ルート証明書をインポートする
Windows 側で設定済みの証明書は WSL には引き継がれない。手動でインポートする。
証明書の配置
Windows 側からエクスポートした .pem ファイルを WSL 内の /usr/local/share/ca-certificates/ にコピーする。拡張子は必ず .crt にリネームすること。
sudo cp /mnt/c/Users/YourName/Downloads/company_cert.pem /usr/local/share/ca-certificates/company.crt
社内ドキュメントには/usr/share/ca-certificates/に置くと記載されていたが、/user/local/share/ca-certificates/に置けばあとから手動操作する必要がなくなる。
なぜ local パスが必要(推奨)なのか?
Linux(Ubuntu/Debian)には、証明書を置く場所が2つあります。/usr/share/ca-certificates/ (社内ドキュメントの場所)
OSが標準で持っている証明書を管理する場所です。
ここにファイルを置いただけでは認識されず、sudo dpkg-reconfigure ca-certificates を実行した後に、青い画面のメニューでその証明書にチェック(スペースキー)を入れて「OK」を押すという手動操作が必要です。これを忘れると反映されません。
/usr/local/share/ca-certificates/ (推奨)
「ユーザーが後から追加した証明書」専用の場所です。
ここに .crt ファイルを置いて sudo update-ca-certificates と打つだけで、メニュー操作なしで自動的に信頼済みリストに加えてくれます。
証明書ストアの更新
sudo update-ca-certificates
実行結果に 1 added, 0 removed; done. と出れば OS レベルでの認識は完了。
ステップ2:Git の SSL バックエンド問題を修正する
Windows専用のSSLバックエンド設定を解除
WSL 上の Git が Windows の設定を誤って参照し、fatal: Unsupported SSL backend 'schannel' とエラーになるため設定を解除する。
git config --global --unset http.sslBackend
OSの証明書カタログを明示的に指定
git config --global http.sslcainfo /etc/ssl/certs/ca-certificates.crt
ステップ3:nvm (Node Version Manager) の手動インストール
通常の curl -fsSL https://claude.ai/install.sh | bash が証明書エラーで止まるため、Git を介さずに直接スクリプトを取得する。
ディレクトリ作成とスクリプト取得
mkdir -p ~/.nvm
# -k オプションで証明書チェックを一時的にバイパス
curl -k -o ~/.nvm/nvm.sh https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/nvm.sh
設定を ~/.bashrc に追記
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.bashrc
source ~/.bashrc
ステップ4:Node.js のインストールと SSL 設定
nvm 経由で Node.js をインストールし、npm が社内証明書を参照するように設定する。
Node.js LTS のインストール
nvm install --lts
npm に証明書を教える
npm config set cafile /etc/ssl/certs/ca-certificates.crt
# 必要に応じてSSLチェックを緩和
npm config set strict-ssl false
ステップ5:Claude Code の導入
Node.js 実行環境自体に証明書を認識させる。
環境変数の永続化
echo 'export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt' >> ~/.bashrc
source ~/.bashrc
Claude Code のインストール
nvm を使用した場合、homeディレクトリにインストールされるのでsudo は不要。
npm install -g @anthropic-ai/claude-code
動作確認
claude
SELF_SIGNED_CERT_IN_CHAIN エラーが出ずにログイン画面が表示されれば成功
ステップ6:またSSL証明書エラーになった
Claudeのインストール、ログインに成功したのに後日claudeを使ったらまたSSL証明書エラーになった。
nvm で入れたNode.jsがsystem CAを参照しておらず、
SELF_SIGNED_CERT_IN_CHAIN(SSL/TLS通信において「証明書チェーンのどこかに自己署名証明書(信頼できない証明書)が存在する」ことを示すエラー)になっていたことが原因。
NODE_OPTIONS=--use-openssl-ca と証明書関連の環境変数を設定することで解消した。
~/.bashrcに入れることで恒久的に設定できる。
echo 'export NODE_OPTIONS=--use-openssl-ca' >> ~/.bashrc
echo 'export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt' >> ~/.bashrc
echo 'export NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/certificate.crt' >> ~/.bashrc
source ~/.bashrc
ステップ7: またまたSSL証明書エラーになった。
PCの電源を切って再度起動した以外に何もしていないのに、
- curl -v https://api.anthropic.com/ 失敗
- curl -v https://github.com 失敗
という状態。
どうやらUbuntuのデフォルトの証明書を無効化していたことが原因らしい。そんな操作をしたつもりはなかったが、以下のような流れで無効化していたと思われる。
/usr/share/ca-certificates/に証明書を配置した場合、配置した証明書を反映させるとき、選択する画面が出るが(画像参照)、てっきり自分が配置したものを選んであればいいのかと思って、このままEnterを押していた。
やり直すたび毎回そうしていて、それでもclaudeを使える瞬間があったのでそれが原因ではない気もするが、mozilla/... の証明書がコメントアウトになっていたのが原因かもしれない。
コメントアウトを解除して自分で設置した証明書を含めて合計149の証明書が有効になった状態でclaudeを実行したら、数日経過後も安定して動くようになった。
