HTTPS 证书

在版本 1.3 中添加。

默认情况下,pip 将对它通过 HTTPS 进行的网络连接执行 SSL 证书验证。这些有助于防止针对包下载的中间人攻击。这不会使用系统证书存储,而是使用来自 certifi 的捆绑 CA 证书存储。

使用特定证书存储

--cert 选项(以及相应的 PIP_CERT 环境变量)允许用户指定 pip 要使用的不同证书存储/捆绑包。也可以使用 REQUESTS_CA_BUNDLECURL_CA_BUNDLE 环境变量。

使用系统证书存储

在版本 22.2 中添加: 实验性支持,在 --use-feature=truststore 后面。与任何其他 CLI 选项一样,这可以通过配置或环境变量在全局范围内启用。

可以将系统信任存储用于验证 HTTPS 证书,而不是捆绑的 certifi 证书。这种方法通常在无需额外配置的情况下支持企业代理证书。

为了使用系统信任存储,你需要使用 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 错误,你应该在 truststore GitHub 问题跟踪器 上打开一个问题,而不是 pip 的问题跟踪器。truststore 的维护人员将帮助诊断和解决问题。