HTTPS証明書

バージョン1.3で追加。

デフォルトでは、pipはHTTPS経由で行うネットワーク接続に対してSSL証明書の検証を実行します。これにより、パッケージダウンロードに対する中間者攻撃を防ぐことができます。これはシステム証明書ストアを使用するのではなく、certifiからバンドルされたCA証明書ストアを使用します。

特定の証明書ストアの使用

--certオプション(および対応するPIP_CERT環境変数)を使用すると、pipが使用する別の証明書ストア/バンドルを指定できます。REQUESTS_CA_BUNDLEまたはCURL_CA_BUNDLE環境変数を使用することも可能です。

システム証明書ストアの使用

バージョン22.2で追加: --use-feature=truststoreの背後にある実験的なサポート。他のCLIオプションと同様に、これはグローバルに設定または環境変数を使用して有効にできます。

バンドルされたcertifi証明書ではなく、システムトラストストアを使用してHTTPS証明書の検証を行うことができます。このアプローチは、通常、追加の設定なしで企業プロキシ証明書をサポートします。

システムトラストストアを使用するには、Python 3.10以降が必要です。

$ python -m pip install SomePackage --use-feature=truststore
[...]
Successfully installed SomePackage
$ python -m pip install SomePackage --use-feature=truststore
[...]
Successfully installed SomePackage
C:> py -m pip install SomePackage --use-feature=truststore
[...]
Successfully installed SomePackage

いつ使用するのか

pipが認識していないカスタム証明書チェーンがシステムに構成されている場合、システムトラストストアの使用を試みる必要があります。通常、この状況は、「certificate verify failed: unable to get local issuer certificate」というメッセージを含むSSLCertVerificationErrorとして発生します。

$ python -m pip install -U SomePackage
[...]
   SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (\_ssl.c:997)'))) - skipping
$ python -m pip install -U SomePackage
[...]
   SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (\_ssl.c:997)'))) - skipping
C:> py -m pip install -U SomePackage
[...]
   SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (\_ssl.c:997)'))) - skipping

このエラーは、OpenSSLがチェーンを検証するための信頼アンカーを見つけられなかったことを意味します。certifiの代わりにシステムトラストストアを使用すると、この問題が解決する可能性があります。

truststore機能を使用しているときにTLS/SSLエラーが発生した場合は、pipの問題トラッカーではなく、truststoreのGitHub問題トラッカーで問題を開いてください。truststoreのメンテナーが問題の診断と修正に役立ちます。