WindowsにおけるpipのSSL証明書エラーの解決方法(社内プロキシ対応ガイド)

intermediate🪟 Windows2026-07-20| Windows 10/11, Python 3.8+, pip 20.0+, 社内プロキシ (Zscaler, Fortinet, Blue Coat)

Error Message

pip._vendor.urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/requests/ (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)')))
#pip#ssl#python#windows#プロキシ#devops

問題点Pythonパッケージをインストールしようとして大量の赤いテキスト(エラー)が表示される場合、企業のファイアウォールが原因である可能性があります。これは通常、会社がZscalerやFortinetなどのツールを使用してSSLインスペクション(ディープ・パケット・インスペクション)を行っている場合に発生します。pip installを実行すると、pipはセキュアなHTTPS接続を介してPyPIにアクセスしようとします。企業のプロキシがこれを傍受し、スキャンのために通信を復号した上で、独自の内部証明書を使用して再署名します。

標準的なPythonのインストール環境では、会社のプライベート認証局(CA)を認識していません。pipはプロキシの身元を検証できないため、潜在的な中間者攻撃(man-in-the-middle attack)から保護するために接続を遮断します。

エラーメッセージ```

pip._vendor.urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='pypi.org', port=443): ... [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)


## 根本原因Pipはセキュリティに関して非常に厳格です。ウェブブラウザとは異なり、pipはデフォルトでWindowsのシステム証明書ストアを確認しません。代わりに、`certifi`ライブラリによって提供される信頼された証明書の内部バンドルを利用します。プロキシが本物のPyPI証明書を企業のものに差し替えると、pipはリストを確認しますが一致するものが見つからず、`SSLCertVerificationError`を発生させます。
## 解決策1:迅速な回避策(低セキュリティ)`pandas`や`requests`などのパッケージを今すぐ1つだけインストールする必要がある場合は、この方法を使用してください。特定のドメインを「信頼済み」としてマークすることで、それらのホストに対してのみSSLチェックをスキップするようpipに指示します。これは、SSLをグローバルに無効化するよりも安全な、対象を限定したバイパス方法です。

pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package_name>


注意:新しいものをインストールするたびに、これらのフラグを入力する必要があります。
## 解決策2:「一度設定すればOK」の方法ほとんどの開発者は永続的な修正を好みます。常に必要なドメインを信頼するように、グローバルなpip設定を変更できます。これは、業務用のマシンで発生する永続的なプロキシの問題に対処する最も効率的な方法です。
- コマンドプロンプトまたはPowerShellを開きます。- 次のコマンドを実行します。```
pip config set global.trusted-host "pypi.org files.pythonhosted.org pypi.python.org"

このコマンドは、%APPDATA%\pip\pip.inipip.iniファイルを自動的に作成します。以降、pipはこれら3つの主要なPythonパッケージソースに対する証明書の検証を無視します。

解決策3:セキュリティ優先のアプローチ(推奨)この問題を解決する最もプロフェッショナルな方法は、企業の証明書を信頼するようにpipに学習させることです。これにより、接続の暗号化と検証が維持されます。

ステップA:企業の証明書をエクスポートする- ChromeまたはEdgeでhttps://pypi.orgにアクセスします。- URLの横にある鍵アイコン > この接続は保護されています > 証明書は有効ですをクリックします。- 詳細タブに切り替え、ルートCA(階層の最上部にある項目)を選択します。- エクスポートをクリックし、Base-64 encoded X.509 (.CER)ファイルとして保存します。- ファイル名をcompany-root.pemに変更します。### ステップB:証明書の場所をpipに指定する環境変数を使用して、このファイルの場所を正確にpipに伝えることができます。これにより、requestsライブラリなどの他のPythonツールもこの修正の恩恵を受けることができます。

setx PIP_CERT "C:\Users\YourName\Documents\company-root.pem"
setx REQUESTS_CA_BUNDLE "C:\Users\YourName\Documents\company-root.pem"

注意:変更を反映させるために、setxの実行後にターミナルを再起動してください。

解決策4:Certifiに証明書をマージするローカルのcertifiバンドルが単に古いだけの場合もあります。ゲスト用Wi-Fiを利用したり、モバイルホットスポットを60秒間使用したりできる場合は、バンドルを直接更新してみてください。

python -m pip install --upgrade certifi

企業ネットワークに留まる必要がある場合は、次のコマンドを実行して証明書の場所を確認してください。

python -c "import certifi; print(certifi.where())"

そのファイルをNotepad++などで開き、一番下までスクロールして、企業の.pem証明書のテキスト内容を貼り付けます。これにより、会社の信頼設定がグローバル標準と統合されます。

検証すべてが正常に動作していることを確認するために、クリーンインストールを試してください。ハードドライブ上の既存ファイルを使用するのではなく、pipに強制的にサーバーと通信させるために--no-cache-dirフラグを使用します。

pip install --no-cache-dir requests

100KBのダウンロードがエラーなしで完了すれば、Python環境は正式にプロキシに対応したことになります。

ベストプラクティス- **自動化:**IT管理者の場合、事前設定済みのpip.iniC:\ProgramData\pip\pip.iniにデプロイすることで、そのマシン上のすべてのユーザーに対してこの問題を解決できます。- **PYTHONHTTPSVERIFY=0を避ける:**ネット上でこの方法が提案されているのを見かけるかもしれません。これはすべてのPythonスクリプトのセキュリティを無効にします。非常に危険であり、本番環境では絶対に使用しないでください。- **WSLに関する考慮事項:**Windows Subsystem for Linuxを使用している場合、独自の証明書ストアが/etc/ssl/certsにあることを忘れないでください。そこには別途、企業のCAをインポートする必要があります。

Related Error Notes