ker*_*ter 4 python ssl twisted
我正在运行ff.来自Mac OS X(优胜美地)上的virtualenv的代码:
# testfb.py
from twisted.internet import reactor
from twisted.python import log
from twisted.web.client import Agent
GRAPH_API = "https://graph.facebook.com/v2.5"
def stop(_):
reactor.stop()
def get_me(access_token):
agent = Agent(reactor)
uri = "{}/me?access_token={}".format(GRAPH_API, access_token)
log.msg("uri:" + uri)
return agent.request("GET", uri)
if __name__ == "__main__":
import sys
access_token = sys.argv[1]
d = get_me(access_token)
d.addErrback(log.err)
d.addCallback(stop)
reactor.run()
Run Code Online (Sandbox Code Playgroud)
我得到:
Failure: twisted.web._newclient.ResponseNeverReceived: [<twisted.python.failure.Failure OpenSSL.SSL.Error: [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]>]
Run Code Online (Sandbox Code Playgroud)
当我用卷毛打电话给uri时,我没有这个问题.
顺便说一下,我还在virtualenv上使用pip安装了service_identity.
您可能没有配置任何OpenSSL信任根.这曾经是偶然发生的,因为Cryptography与OS X中的OpenSSL的内置版本相关联.由于El Capitan中删除了该版本的标题,因此Cryptography现在发布了带有自己内置版本的pyOpenSSL的轮子.
这是Twisted中的一个错误,我们知道它; 你可以在这里阅读更多相关信息:https://twistedmatrix.com/trac/ticket/6372.它已经开放了一段时间; 因为它在很长一段时间内都是偶然的,所以它并不是一个高优先级.感谢像你这样的人的错误报告,这正在改变......
同时,你有两种可能的选择.
一个是你可以从Homebrew安装OpenSSL ,它会自动将一些证书颁发机构证书放在Cryptography的OpenSSL已经在寻找它们的默认位置brew install openssl.(您可以/usr/local/etc/openssl/cert.pem在安装后看到这些证书颁发机构证书)
另一个是您可以从Certifi获取一些证书,然后设置(未记录的)环境变量,告诉OpenSSL查找它们,例如,export SSL_CERT_FILE="$(python -m certifi)"在调用Python程序之前,在shell中执行.
对不起,我希望这能回答你的问题!
| 归档时间: |
|
| 查看次数: |
2668 次 |
| 最近记录: |