2015-01-14 31 views
2

我正在使用CentOS 6.6。因此我没有我需要的最新的(2.7系列)Python包。我已经安装了Python 2.7.9从源头上/usr/local/lib/python2.7:Python2.7.9的表单源安装后,我得到ssl.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:581)

ll /usr/local/lib/python2.7/ 
total 52K 
drwxr-xr-x. 2 root root 4.0K Jan 13 14:59 bin 
drwxr-xr-x. 3 root root 4.0K Jan 7 15:15 include 
drwxr-xr-x. 4 root root 4.0K Jan 7 15:15 lib 
-rw-r--r--. 1 root root 12K Jan 14 11:46 LICENSE.txt 
-rw-r--r--. 1 root root 117 Jan 14 11:46 MANIFEST.in 
-rw-r--r--. 1 root root 238 Jan 14 11:46 NOTICE.txt 
-rw-r--r--. 1 root root 88 Jan 14 11:46 setup.cfg 
-rw-r--r--. 1 root root 2.6K Jan 14 11:46 setup.py 
drwxr-xr-x. 3 root root 4.0K Jan 7 15:15 share 
drwxr-xr-x. 6 root root 4.0K Jan 7 15:03 site-packages 
-rw-r--r--. 1 root root 113 Jan 14 11:46 tox.ini 

现在我有使用pysphere脚本并用它工作正常(和它的作品确定与其他机器2.6和2.7),但是当我使用当前设置运行它时,我得到:

$ python main.py 
Connecting to vSphere... 
Traceback (most recent call last): 
    File "main.py", line 51, in <module> 
    server.connect(VSPHERE_IP, VSPHERE_USER, VSPHERE_PASS) 
    File "/usr/local/lib/python2.7/lib/python2.7/site-packages/pysphere/vi_server.py", line 101, in connect 
    request)._returnval 
    File "/usr/local/lib/python2.7/lib/python2.7/site-packages/pysphere/resources/VimService_services.py", line 2170, in RetrieveServiceContent 
    self.binding.Send(None, None, request, soapaction="urn:vim25/5.0", **kw) 
    File "/usr/local/lib/python2.7/lib/python2.7/site-packages/pysphere/ZSI/client.py", line 295, in Send 
    self.local.h.connect() 
    File "/usr/local/lib/python2.7/lib/python2.7/httplib.py", line 1212, in connect 
    server_hostname=server_hostname) 
    File "/usr/local/lib/python2.7/lib/python2.7/ssl.py", line 350, in wrap_socket 
    _context=self) 
    File "/usr/local/lib/python2.7/lib/python2.7/ssl.py", line 566, in __init__ 
    self.do_handshake() 
    File "/usr/local/lib/python2.7/lib/python2.7/ssl.py", line 788, in do_handshake 
    self._sslobj.do_handshake() 
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581) 

$ pip -V 
pip 6.0.6 from /usr/local/lib/python2.7/lib/python2.7/site-packages (python 2.7) 
$ pip freeze 
Django==1.7.2 
docutils==0.12 
ecdsa==0.11 
paramiko==1.15.2 
pep8==1.5.7 
pycrypto==2.6.1 
Pygments==2.0.1 
pysphere==0.1.7 
pyvmomi==5.5.0.2014.1.1 
requests==2.5.1 
six==1.9.0 
virtualenv==12.0.5 

这里有什么坏的?

+0

我有同样的问题与Docker无花果工具https://github.com/docker/fig/issues/890 ...我也相信问题出现时,我安装了Python 2.7.9 ...他们改变了一些东西与SSL – Anentropic

+0

有人在这里也使用pysphere相同的问题http://bugs.python.org/issue23052 – Anentropic

回答

1

我是晚年来参加派对的,但是我自己刚碰到这个问题,发现一个解决方案。如果有人在将来遇到这个问题,我会留下评论。

原因为什么发生这种情况(这是Patryk的问题),是Python的httplib.HTTPSConnection以前没有默认验证SSL证书。从Python 2.7.9起,SSL validation is required。如果您的ESX服务器的SSL证书有问题,则连接将失败。

不幸的是the pysphere library is no longer maintained

假设你正在尝试使用pysphere库在私人和安全的环境,你可以使用下面的补丁到pysphere/ZSI/client.py文件:

294c294,295 
<   self.local.h = transport(netloc, None, **self.transdict) 
--- 
>   import ssl 
>   self.local.h = transport(netloc, None, context=ssl._create_unverified_context(), **self.transdict) 

说明:本pysphere库使用httplib.HTTPSConnection建立到ESX服务器的连接。如果遇到SSL证书问题,则会因上述例外而失败。要恢复Python 2.7.9之前的行为,您需要告知httplib.HTTPSConnection不验证SSL证书。

+0

太棒了! :)我不再使用上面提到的代码,但它可能对别人有用。谢谢! – Patryk

相关问题