美文网首页
AttributeError: 'X509' o

AttributeError: 'X509' o

作者: 威武不能屈 | 来源:发表于2017-05-22 14:14 被阅读1163次

问题描述

执行python脚本报错,报错信息如下

Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/itchat/utils.py", line 125, in test_connect
    r = requests.get(config.BASE_URL)
  File "/Library/Python/2.7/site-packages/requests/api.py", line 70, in get
    return request('get', url, params=params, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/api.py", line 56, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 488, in request
    resp = self.send(prep, **send_kwargs)
  File "/Library/Python/2.7/site-packages/requests/sessions.py", line 609, in send
    r = adapter.send(request, **kwargs)
  File "/Library/Python/2.7/site-packages/requests/adapters.py", line 423, in send
    timeout=timeout
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 594, in urlopen
    chunked=chunked)
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 350, in _make_request
    self._validate_conn(conn)
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/connectionpool.py", line 835, in _validate_conn
    conn.connect()
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/connection.py", line 330, in connect
    cert = self.sock.getpeercert()
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 324, in getpeercert
    'subjectAltName': get_subj_alt_name(x509)
  File "/Library/Python/2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 166, in get_subj_alt_name
    cert = _Certificate(openssl_backend, peer_cert._x509)
AttributeError: 'X509' object has no attribute '_x509'

You can't get access to internet or wechat domain, so exit.

解决办法

google错误关键字“AttributeError: 'X509' object has no attribute '_x509'”发现说是OpenSSL版本太低导致
python -c 'import OpenSSL; print(OpenSSL.__version__)',这个命令可以查看OpenSSL版本号,终端执行后:

图1
网上搜说OpenSSL版本号需要>0.13
于是接下来就看怎么升级OpenSSL
OpenSSL并不是一个单独的库,是在其他库里依赖的,这里一直没有搞清楚是不是在pyOpenSSL里,升级了pyOpenSSL到最新版本17.0.0,执行python脚本仍然报同样的错误
看到了cryptography官网里关于OpenSSL的描述(官网点这里
根据官网文档描述执行了如下操作:
brew install openssl@1.1
env LDFLAGS="-L$(brew --prefix openssl@1.1)/lib" CFLAGS="-I$(brew --prefix openssl@1.1)/include" pip install cryptography

安装完成后,再次执行python脚本,还是报同样的错误
此时我的内心是崩溃的。。。
继续google,降低了requests库的版本号:

pip install requests==2.11.1

再次执行python脚本,还是报同样的错。。。
最后决定再次卸载pyOpenSSL和cryptography库:

pip uninstall pyOpenSSL cryptography
sudo pip install pyOpenSSL cryptography

再次执行python脚本,竟然执行成功了。。。
这时执行:

python -c 'import OpenSSL; print(OpenSSL.__version__)'

发现版本号还是0.13.1。。。这中间一定是发生了什么不可描述的事情。。(之前也卸载重装pyOpenSSL和cryptography库,问题还是存在,应该是中间哪一步)

相关文章

网友评论

      本文标题:AttributeError: 'X509' o

      本文链接:https://www.haomeiwen.com/subject/edybxxtx.html