我在ubuntu上使用python 2.7.6
当我使用urlfetch
(1.0.2)将数据发布到远程服务器时,我收到此错误。它在服务器的ssl证书更新后2天前启动。
已经向另一个python包{ fileOne: {title: blah, text: blah}, fileTwo... }
报告了类似的问题。解决方案是通过运行
snapshot.val()
但我只有这个
request
似乎没有下载和安装任何内容。
有些帖子暗示它与密码(https://github.com/kennethreitz/requests/issues/3608#issuecomment-250681069)
有关pip install --force-reinstall requests[security]
看起来很正常吗?我能做些什么来解决它吗?
目标服务器位于Google App Engine上。新的SSL证书不支持Requirement already satisfied: requests[security] in /usr/lib/python2.7/dist-packages
requests 2.2.1 does not provide the extra 'security'
。
Ubuntu版本信息:
openssl s_client -connect www.example.com:443
CONNECTED(00000003)
140353237063328:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 305 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
答案 0 :(得分:2)
我的第一选择是使用this answer通过修补ssl.py
来解决问题。
import ssl
from functools import wraps
def sslwrap(func):
@wraps(func)
def bar(*args, **kw):
kw['ssl_version'] = ssl.PROTOCOL_TLSv1
return func(*args, **kw)
return bar
ssl.wrap_socket = sslwrap(ssl.wrap_socket)
然而它没有用。
最后我发现我可以通过从源代码将python升级到2.7.13
来解决它。以下是步骤:
1)安装python dev依赖
sudo apt-get install -y \
autotools-dev \
blt-dev \
bzip2 \
dpkg-dev \
g++-multilib \
gcc-multilib \
libbluetooth-dev \
libbz2-dev \
libexpat1-dev \
libffi-dev \
libffi6 \
libffi6-dbg \
libgdbm-dev \
libgpm2 \
libncursesw5-dev \
libreadline-dev \
libsqlite3-dev \
libssl-dev \
libtinfo-dev \
mime-support \
net-tools \
netbase \
python-crypto \
python-mox3 \
python-pil \
python-ply \
quilt \
tk-dev \
zlib1g-dev
2)下载源代码
wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz
3)打开包装
tar xfz Python-2.7.13.tgz
4)配置
cd Python-2.7.13/
./configure --prefix /usr/local/lib/python2.7.13 --enable-ipv6
5)构建
make
6)部署
sudo make install
7)安装pip
和urlfetch
以及其他依赖项
答案 1 :(得分:2)
旧版本的Python上会出现此错误,该版本不支持TLS SNI(服务器名称指示)扩展。您需要使用SNI通过HTTPS连接到App Engine上托管的站点。看起来Python 2.7.9及更高版本中存在SNI支持。
如果您正在使用从用Python编写的App Engine应用程序发出请求并需要SNI支持,则需要reference version 2.7.11 of the ssl library in your app.yaml file或者您将遇到同样的问题。