Como resolver o erro de certificado SSL ao instalar o PIP?

1

Quando estou tentando instalar o PIP usando o pacote baixado do bootstrap.pypa.io, estou recebendo um erro do Certificado SSL. Eu segui outras postagens e tentei fazer isso desativando a verificação de certificado em /etc/python/cert-verification.cfg e tentei usar PYTHONHTTPSVERIFY=0 , mas isso não parece funcionar e finalmente decidi fazer essas perguntas porque outras postagens realmente não ajudam meu caso.

Eu tenho o seguinte ambiente:

OS: centos-release-7-5.1804.1.el7.centos.x86_64

Pacotes Python:

[root@localhost ~]# yum list installed|grep python
dbus-python.x86_64                    1.1.1-9.el7                    @anaconda
libselinux-python.x86_64              2.5-12.el7                     @anaconda
newt-python.x86_64                    0.52.15-4.el7                  @anaconda
python.x86_64                         2.7.5-69.el7_5                 @updates
python-backports.x86_64               1.0-8.el7                      @base
python-backports-ssl_match_hostname.noarch
python-configobj.noarch               4.7.2-7.el7                    @anaconda
python-decorator.noarch               3.4.0-3.el7                    @anaconda
python-firewall.noarch                0.4.4.4-14.el7                 @anaconda
python-gobject-base.x86_64            3.22.0-1.el7_4.1               @anaconda
python-iniparse.noarch                0.4-9.el7                      @anaconda
python-ipaddress.noarch               1.0.16-2.el7                   @base
python-libs.x86_64                    2.7.5-69.el7_5                 @updates
python-linux-procfs.noarch            0.4.9-3.el7                    @anaconda
python-perf.x86_64                    3.10.0-862.9.1.el7             @updates
python-pycurl.x86_64                  7.19.0-19.el7                  @anaconda
python-pyudev.noarch                  0.15-9.el7                     @anaconda
python-schedutils.x86_64              0.4-6.el7                      @anaconda
python-setuptools.noarch              0.9.8-7.el7                    @base
python-slip.noarch                    0.4.0-4.el7                    @anaconda
python-slip-dbus.noarch               0.4.0-4.el7                    @anaconda
python-urlgrabber.noarch              3.10-8.el7                     @anaconda
python-wheel.noarch                   0.24.0-2.el7                   @epel
rpm-python.x86_64                     4.11.3-32.el7                  @anaconda

A seguir estão os passos e erros:

[root@localhost ~]# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1604k  100 1604k    0     0  73257      0  0:00:22  0:00:22 --:--:-- 72502
[root@localhost ~]#

[root@localhost ~]# PYTHONHTTPSVERIFY=0 python get-pip.py
Collecting pip
  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)'),)': /packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl
  Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)'),)': /packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl
  Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)'),)': /packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl
  Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)'),)': /packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl
  Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)'),)': /packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl
Could not install packages due to an EnvironmentError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl (Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)'),))

Gostaria de acrescentar, o Python foi pré-instalado com o SO e estou tentando instalar o PIP diretamente. Eu tentei instalar a partir de epel-repo mas eu recebo uma versão mais antiga e quando tento atualizá-lo (porque sem atualização, eu continuo recebendo erro para instalar a nova versão do PIP) recebo o mesmo erro.

Alguém poderia sugerir como consertar isso?

    
por Ankit Vashistha 12.08.2018 / 09:43

1 resposta

1

Há algo sobre sua situação que não se soma. Acabei de fazer os comandos exatos como você em uma VM do CentOS 7.5 e eles funcionaram sem problemas:

os version
$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
download
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1604k  100 1604k    0     0  1676k      0 --:--:-- --:--:-- --:--:-- 1676k
instale
$ PYTHONHTTPSVERIFY=0 python get-pip.py
Collecting pip
  Downloading https://files.pythonhosted.org/packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 7.4MB/s
Collecting wheel
  Downloading https://files.pythonhosted.org/packages/81/30/e935244ca6165187ae8be876b6316ae201b71485538ffac1d718843025a9/wheel-0.31.1-py2.py3-none-any.whl (41kB)
    100% |████████████████████████████████| 51kB 4.4MB/s
Installing collected packages: pip, wheel
  Found existing installation: pip 10.0.1
    Uninstalling pip-10.0.1:
      Successfully uninstalled pip-10.0.1
Successfully installed pip-18.0 wheel-0.31.1

Solução alternativa

Para solucionar esse problema, você pode alterar o seguinte arquivo no Linux / Unix para informar pip para confiar apenas neste host:

$ cat ~/.pip/pip.conf
[global]
trusted-host = files.pythonhosted.org
               bootstrap.pypa.io

Ou faça isso como uma única vez: bootstrap.pypa.io

Por que eu precisaria disso?

É provável que o país em que você está ou um firewall corporativo esteja se inserindo como um host confiável e esteja mexendo com o host real de onde os dados estão vindo. Isso geralmente prejudica os certificados SSL, pois eles incluem o host / nome de domínio para o qual foram criados explicitamente.

Dica de depuração

Quando você se depara com problemas como esse com o Python, sempre é possível ativar o registro detalhado por meio dos -vvv switches:

$ PYTHONHTTPSVERIFY=0 python -vvv get-pip.py |& less
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# trying /usr/lib64/python2.7/site.so
# trying /usr/lib64/python2.7/sitemodule.so
# trying /usr/lib64/python2.7/site.py
# /usr/lib64/python2.7/site.pyc matches /usr/lib64/python2.7/site.py
import site # precompiled from /usr/lib64/python2.7/site.pyc
# trying /usr/lib64/python2.7/os.so
# trying /usr/lib64/python2.7/osmodule.so
...
import pip._vendor.html5lib._ihatexml # loaded from Zip /tmp/tmpYDym4g/pip.zip/pip/_vendor/html5lib/_ihatexml.py
import pip._vendor.html5lib.treebuilders.etree # loaded from Zip /tmp/tmpYDym4g/pip.zip/pip/_vendor/html5lib/treebuilders/etree.py
  Downloading https://files.pythonhosted.org/packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl (1.3MB)
Installing collected packages: pip
  Found existing installation: pip 18.0
    Uninstalling pip-18.0:
      Successfully uninstalled pip-18.0
...

Ao fazer isso, você pode ver as URLs com as quais o script get-pip.py está sendo ativado.

Referências

por 12.08.2018 / 12:21