我已经跳了一段时间来解决这个问题,但似乎无法使它正常工作。我有一个Docker容器,在其中设置了一个用于机器学习的nvidia图像。我安装了所有Python依赖项。然后我开始进行pip包安装。我遇到了第一个错误:
requests.exceptions.SSLError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/5e/c4/6c4fe722df5343c33226f0b4e0bb042e4dc13483228b4718baf286f86d87/certifi-2020.6.20-py2.py3-none-any.whl (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),))
很简单,我有一个用于处理 Cisco umbrella 的证书
。然后我可以轻松地安装所有软件包。但是,为了能够安装最新的软件包,我需要升级 pip,并且升级也正常工作。但是当 pip 升级到20.2.3
时,我突然又遇到了错误:
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),)) - skipping
我进行了谷歌搜索并尝试了我偶然发现的建议:
时间
我发现系统时间不正确-它适用于最初的pip版本,这很奇怪。但更改时间并没有帮助解决问题。
配置文件
我添加了一个包含全局标签的pip.conf
文件,用于受信任的主机和认证。 仍然存在相同的错误。
pip安装
我尝试使用不同的受信任主机标志以及证书标志,这些应该已经在conf文件中指定-如果我理解得正确的话。 然而,两种方法都没有起作用。
该怎么办
我有点束手无策,现在,在容器中安装证书允许我使用pip 9.0.1
(系统默认)安装软件包后,升级到pip 20.2.3
。 我无法让它与任何软件包一起工作。 我尝试了多个pip版本-但是一旦我升级,我会失去证书,并尝试重新安装它。
ADD Cisco_Umbrella_Root_CA.cer /usr/local/share/ca-certificates/Cisco_Umbrella_Root_CA.crt
RUN chmod 644 /usr/local/share/ca-certificates/Cisco_Umbrella_Root_CA.crt
RUN update-ca-certificates --fresh
有人知道这是怎么发生的吗?
更新
Curl
RUN curl -v -k -H"Host; files.pythonhosted.org" https://files.pythonhosted.org/packages/8a/fd/bbbc569f98f47813c50a116b539d97b3b17a86ac7a309f83b2022d26caf2/Pillow-6.2.2-cp36-cp36m-manylinux1_x86_64.whl
---> Running in ac095828b9ec
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying ::ffff:146.112.56.166...
* TCP_NODELAY set
* Connected to files.pythonhosted.org (::ffff:146.112.56.166) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [85 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3177 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [262 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
从最后一行可以看出,他们在协议上存在分歧,导致通信失败。
FROM "nvidia/cuda:10.0-cudnn7-runtime-ubuntu18.04"
,所以必须使用 apt-get 对吧?据我所知,安装步骤在这篇文章中已经完成了。或者你有特定的证书安装方法吗? - JTIMpypi.org
的 SSL 验证失败,请通过在图像内运行以下命令来检查遇到问题的网络的 SSL 证书:openssl s_client -showcerts -servername pypi.org -connect pypi.org:443 2>/dev/null | openssl x509 -noout -text
。组织颁发者应为O = DigiCert Inc
,并带有几个其他对digicert
的引用。如果您看到其他情况,则可能是潜在问题。 - concisionapt-get -y update && apt-get install -y curl && curl https://pypi.org/simple/pip/
。如果整个容器存在SSL问题,则curl
可能会输出更详细的输出,可以帮助缩小问题范围。如果curl
成功,则很可能只是pip
的问题。我注意到在pip
的安装页面上有一个关于使用由操作系统管理的Python安装的警告,https://pip.pypa.io/en/stable/installing/。这可能具有一定的重要性? - concision