できない.dev

Python pip install が SSL 証明書エラーで失敗する

社内プロキシや古い Python の同梱証明書が原因で SSL 検証が失敗する。
--trusted-host で逃がすより、まず CA 証明書と Python のバージョンを直す。

#pip#ssl#proxy#certificate

公開: 更新:

要約

SSL: CERTIFICATE_VERIFY_FAILEDpip install が止まる時、安易に --trusted-host で 検証を切ると MITM の温床 になる。
まず社内 CA 証明書 / Python の証明書ストアを正しく使えるように直す。

よくある原因

  1. 社内プロキシの SSL インスペクション: 企業ネットワークで TLS が再署名されている
  2. 同梱 CA の期限切れ: 古い Python が古い証明書バンドルを使い続けている
  3. macOS の証明書未インストール: 公式インストーラ同梱の Install Certificates.command 未実行
  4. 自己署名の社内ミラー: 社内 PyPI / devpi が独自 CA で署名されている

解決策

1. 社内 CA を環境変数で指定

export REQUESTS_CA_BUNDLE=/etc/ssl/certs/corp-ca.pem
export SSL_CERT_FILE=/etc/ssl/certs/corp-ca.pem
pip install <pkg>

社内ヘルプデスクから配布されている CA 証明書ファイルを取得しておく。

2. Python を更新する

# macOS (Homebrew)
brew upgrade python
# Windows
winget upgrade Python.Python.3

3.6 系は EOL。
証明書バンドルも古いままなので、サポート対象バージョン(3.9 以降)に上げる。

3. macOS 公式インストーラの後処理

/Applications/Python 3.x/Install Certificates.command

このスクリプトが certifi の証明書を OpenSSL 側に紐付ける。python.org のインストーラを使う場合は必須

4. pip 設定で恒久化

pip config set global.cert /etc/ssl/certs/corp-ca.pem

pip config~/.config/pip/pip.conf に書き込まれ、毎回の指定が要らなくなる。

この記事は役立ちましたか?