GitHub Copilotの「自己署名証明書」エラー解決方法
問題の概要
GitHub Copilotをインストールした際に、「GitHub Copilot could not connect to server. Extension activation failed: "self signed certificate in certificate chain"」というエラーが発生する場合があります。
原因
この問題は、主に企業ネットワーク環境で発生します。多くの企業ネットワークでは、セキュリティ対策としてSSL/TLSトラフィックを検査する「Man-in-the-middle」方式のプロキシが使用されています。これにより、GitHubサーバーの本来の証明書が企業の独自CAで署名された証明書に置き換えられ、証明書チェーンに自己署名証明書が含まれる状態になります。
解決方法
Windows環境での解決策
win-ca拡張機能の使用
最も推奨される解決方法です:
win-ca拡張機能をインストール
bashcode --install-extension ukoloff.win-ca
設定の変更
Ctrl+Shift+P
でコマンドパレットを開く- 「Win-Ca: Inject」を検索
- モードを「append」に変更
VSCodeの再起動
注意
デフォルト設定では効果がない場合があるため、必ず「append」モードに設定してください。
macOS環境での解決策
mac-ca-vscode拡張機能の使用
macOSでは以下の拡張機能が有効です:
mac-ca-vscode拡張機能をインストール
bashcode --install-extension linhmtran168.mac-ca-vscode
VSCodeの再起動
証明書の手動設定
企業の証明書を手動で設定する方法:
企業のルート証明書をエクスポート(通常は
.pem
形式)環境変数に追加:
bashexport NODE_EXTRA_CA_CERTS="/path/to/your/corporate/cert.pem"
VSCodeを再起動
IntelliJ/Android Studioでの解決策
JetBrains製IDEではより簡単に設定できます:
Ctrl+Alt+S
で設定を開く- 「cert」で検索
- 「Accept non-trusted certificates automatically」を有効化
- IDEを再起動
スクリプトを使用した修正方法
以下のスクリプトでCopilot拡張機能を直接修正する方法もあります:
#!/bin/bash
_VSCODEDIR="$HOME/.vscode/extensions"
_COPILOTDIR=$(ls "${_VSCODEDIR}" | grep -E "github.copilot-[1-9].*" | sort -V | tail -n1)
_EXTENSIONFILEPATH="${_VSCODEDIR}/${_COPILOTDIR}/dist/extension.js"
if [[ -f "$_EXTENSIONFILEPATH" ]]; then
echo "Applying patches to $_EXTENSIONFILEPATH..."
perl -pi -e 's/,rejectUnauthorized:[a-z]}(?!})/,rejectUnauthorized:false}/g' ${_EXTENSIONFILEPATH}
sed -i.bak 's/d={...l,/d={...l,rejectUnauthorized:false,/g' ${_EXTENSIONFILEPATH}
echo "Patch applied successfully!"
else
echo "Copilot extension not found."
fi
# Windows PowerShell版
$vscodeDir = "$env:USERPROFILE\.vscode\extensions"
$copilotDir = Get-ChildItem $vscodeDir | Where-Object { $_.Name -match "github\.copilot-[0-9]" } | Sort-Object Name | Select-Object -Last 1
$extensionFilePath = Join-Path $copilotDir.FullName "dist\extension.js"
if (Test-Path $extensionFilePath) {
$content = Get-Content $extensionFilePath -Raw
$content = $content -replace ',rejectUnauthorized:[a-z]}(?!})', ',rejectUnauthorized:false}'
$content = $content -replace 'd={...l,', 'd={...l,rejectUnauthorized:false,'
Set-Content $extensionFilePath $content
Write-Host "Patch applied successfully!"
} else {
Write-Host "Copilot extension not found."
}
注意
スクリプトを使用した修正は非公式な方法であり、Copilotの更新ごとに再適用が必要になる可能性があります。信頼できるソースからのみスクリプトを実行してください。
企業ネットワーク特有の対処法
ZScalerなどのセキュリティソフト対策
一部の企業ではZScalerなどのセキュリティソフトを使用しています:
- ソフトを一時的に終了(許可されている場合)
- Copilotの機能を確認
- 必要に応じて再起動
プロキシ設定の確認
企業のプロキシ設定が正しく構成されているか確認:
# プロキシ設定の確認
npm config get proxy
npm config get https-proxy
# 必要に応じて設定
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
予防策とベストプラクティス
- 定期的な証明書の更新:企業のルート証明書は定期的に更新
- ネットワークポリシーの確認:必要に応じてIT部門にSSLインスペクションの例外を依頼
- バックアップ方案:複数の解決方法を把握しておく
まとめ
GitHub Copilotの「自己署名証明書」エラーは、主に企業ネットワーク環境でのSSL/TLSインスペクションが原因です。OSやIDEに応じた適切な解決方法を選択することで、問題を解決できます。
推奨アプローチ
- Windows: win-ca拡張機能の使用
- macOS: mac-ca-vscode拡張機能または証明書の手動設定
- JetBrains IDE: 設定での自動承認オプションの有効化
問題が解決しない場合は、企業のIT部門に問い合わせて、ネットワークポリシーや証明書について確認することをお勧めします。