Skip to content

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拡張機能の使用

最も推奨される解決方法です:

  1. win-ca拡張機能をインストール

    bash
    code --install-extension ukoloff.win-ca
  2. 設定の変更

    • Ctrl+Shift+Pでコマンドパレットを開く
    • 「Win-Ca: Inject」を検索
    • モードを「append」に変更
  3. VSCodeの再起動

注意

デフォルト設定では効果がない場合があるため、必ず「append」モードに設定してください。

macOS環境での解決策

mac-ca-vscode拡張機能の使用

macOSでは以下の拡張機能が有効です:

  1. mac-ca-vscode拡張機能をインストール

    bash
    code --install-extension linhmtran168.mac-ca-vscode
  2. VSCodeの再起動

証明書の手動設定

企業の証明書を手動で設定する方法:

  1. 企業のルート証明書をエクスポート(通常は.pem形式)

  2. 環境変数に追加:

    bash
    export NODE_EXTRA_CA_CERTS="/path/to/your/corporate/cert.pem"
  3. VSCodeを再起動

IntelliJ/Android Studioでの解決策

JetBrains製IDEではより簡単に設定できます:

  1. Ctrl+Alt+Sで設定を開く
  2. 「cert」で検索
  3. 「Accept non-trusted certificates automatically」を有効化
  4. IDEを再起動

スクリプトを使用した修正方法

以下のスクリプトでCopilot拡張機能を直接修正する方法もあります:

bash
#!/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
powershell
# 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などのセキュリティソフトを使用しています:

  1. ソフトを一時的に終了(許可されている場合)
  2. Copilotの機能を確認
  3. 必要に応じて再起動

プロキシ設定の確認

企業のプロキシ設定が正しく構成されているか確認:

bash
# プロキシ設定の確認
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

予防策とベストプラクティス

  1. 定期的な証明書の更新:企業のルート証明書は定期的に更新
  2. ネットワークポリシーの確認:必要に応じてIT部門にSSLインスペクションの例外を依頼
  3. バックアップ方案:複数の解決方法を把握しておく

まとめ

GitHub Copilotの「自己署名証明書」エラーは、主に企業ネットワーク環境でのSSL/TLSインスペクションが原因です。OSやIDEに応じた適切な解決方法を選択することで、問題を解決できます。

推奨アプローチ

  • Windows: win-ca拡張機能の使用
  • macOS: mac-ca-vscode拡張機能または証明書の手動設定
  • JetBrains IDE: 設定での自動承認オプションの有効化

問題が解決しない場合は、企業のIT部門に問い合わせて、ネットワークポリシーや証明書について確認することをお勧めします。