python easy_install 因所有软件包的 SSL 证书错误而失败
Posted
技术标签:
【中文标题】python easy_install 因所有软件包的 SSL 证书错误而失败【英文标题】:python easy_install fails with SSL certificate error for all packages 【发布时间】:2014-02-11 11:44:09 【问题描述】:目标:我正在使用 RedHat 5 并尝试为 Web 应用安装最新的 python 和 django。
我成功地 altinstalled python27 和 easy_install,以及使用 openssl 的 wget。
问题: 但是,现在我尝试从 pypi.python.org 获取任何内容,但出现以下错误:
$ sudo easy_install --verbose django
Searching for django
Reading https://pypi.python.org/simple/django/
Download error on https://pypi.python.org/simple/django/: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed -- Some packages may not be found!
Couldn't find index page for 'django' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading https://pypi.python.org/simple/
Download error on https://pypi.python.org/simple/: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed -- Some packages may not be found!
No local packages or download links found for django
error: Could not find suitable distribution for Requirement.parse('django')
我尝试使用 openssl s_client -showcert -connect 查找 pypi.python.org 的证书,但不知道如何处理它,将其存储在哪里。 google 上的信息不多,需要高手帮忙。
谢谢!
编辑:我的意思是 wget* 与 openssl。
$ wget http://ftp.gnu.org/gnu/wget/wget-1.15.tar.gz
$ tar -xzf wget-1.15.tar.gz
$ cd wget-1.15
$ ./configure --with-ssl=openssl
$ make
$ sudo make install
我也无法让 wget 拉出页面:
$ wget https://pypi.python.org/simple/django/
--2014-01-21 11:18:45-- https://pypi.python.org/simple/django/
Resolving pypi.python.org (pypi.python.org)... 199.27.73.185, 199.27.74.184
Connecting to pypi.python.org (pypi.python.org)|199.27.73.185|:443... connected.
ERROR: cannot verify pypi.python.org's certificate, issued by ‘/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance CA-3’:
Unable to locally verify the issuer's authority.
To connect to pypi.python.org insecurely, use `--no-check-certificate'.
【问题讨论】:
运行这个命令,你的CA证书好像没有更新:curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt
然后再试一次。
@BurhanKhalid Spot on.. 谢谢。您应该将其作为答案提交,这可能是每个人的挣扎...
【参考方案1】:
尝试安装pip
来安装python 包。
您可以找到文档以快速安装并使用它here。一般比easy_install
好很多。
它还默认使用 SSL,并使用 Requests 的证书堆栈(源自 mozilla)。
您还可以在Python Packaging User Guide 上找到有关使用 Python 包的大量信息。
【讨论】:
这是循环建议。 pip 站点指示我安装 ez_setup.py,它是 easy_install。我需要解决这个证书错误。它似乎困扰的不仅仅是这个。 您好,get-pip.py
引导文件不再需要ez_setup.py
:) 它将为您安装pip
和setuptools
。我建议 pip 的具体原因是它应该带有自己的 CA 证书堆栈来验证连接。
我可以下载带有 no-check-certificate 的 get-pip.py,但是一旦我运行它,它就会在尝试安装 setuptools 和 pip 时出现证书错误。
我现在认为wget
无法安全连接到 pypi 的原因也是其他任何东西(如pip
和easy_install
)也不能安全连接的原因。当然,对于我通过 SSL/TLS 使用的许多其他设备,PyPI 的 Cert 工作得很好。您是否尝试过最新版本的 OpenSSL?我怀疑 RedHat 5 会变得很旧。
是的,也许是旧的 openssl,我将主机移到了 debian wheezy,并且第一次安装得很完美。德班 1,红帽 0【参考方案2】:
我在寻找此问题的解决方案后找到了此页面。如果其他人有类似的问题,我找到的解决方案是:
在setuptools/ssl_support.py
文件的开头(由easy_install 使用,位于egg 文件中:./lib/python2.7/site-packages/setuptools-3.5.1-py2.7.egg
),证书捆绑文件硬编码在cert_paths
变量中:
cert_paths = """
/etc/pki/tls/certs/ca-bundle.crt
/etc/ssl/certs/ca-certificates.crt
/usr/share/ssl/certs/ca-bundle.crt
/usr/local/share/certs/ca-root.crt
...etc..
"""
easy_install
将使用此列表中存在的第一个文件,因为它调用find_ca_bundle
。如果此证书捆绑文件中的证书已过期,则 easy_install 将失败并出现此 SSL 错误。因此需要更新证书文件或更改此ssl_support.py
文件中的cert_paths
,以指向本地最新的证书捆绑文件。
【讨论】:
Still exists in thesetuptools
code base in 2020【参考方案3】:
我在特定环境中看到过这个问题:带有 macports 的 Mac OS X,在用户的本地路径中安装包。解决方案是从 curl 安装证书:
port install curl-ca-bundle
顺便说一句,除非您没有证书,否则大多数 port
、easy_install
和 pip
命令都会因为 ssl 错误而失败。
【讨论】:
【参考方案4】:您的 curl 证书太旧尝试下载新的 curl 证书:
sudo wget http://curl.haxx.se/ca/cacert.pem -O /etc/pki/tls/certs/ca-bundle.crt
【讨论】:
值得注意的是,根据其他帖子,/etc/pki/tls/certs
目录不需要事先存在,因为它是一个硬编码位置,将由 setuptools 搜索。
如果/etc/pki/tls/certs
不存在,请先执行mkdir -p /etc/pki/tls/certs
。以上是关于python easy_install 因所有软件包的 SSL 证书错误而失败的主要内容,如果未能解决你的问题,请参考以下文章
二进制上传后,easy_install 因错误“找不到安装脚本”而失败?
python easy install时,使用aliyun阿里云镜像提示主机名不匹配的问题
easy_install 和pip安装软件时使用指定的 源地址
easy_install 创建一个 egg 目录而不是 egg 文件