试图向GCM发出Python请求,但没有验证证书。
更新请求和证书包。
尝试调用其他服务器并返回是可以的:
错误消息:错误握手:错误(‘SSL例程“,’SSL_GET_SERVER_‘,’证书验证失败‘)
发布于 2017-07-15 00:30:51
在研究这个问题时,我发现了一些有趣的结果。在我看来,这可能就是问题所在。让我知道。
TL;DR
尝试使用certifi.old_where()。如果这样做有效,那么您确实应该升级到服务器上的一个更新版本的OpenSSL。
资料来源
GitHub:
https://github.com/certifi/python-certifi/issues/32
地址:@Lukasa
你能确认这是否和#26一样的问题吗?也就是说,尝试将certifi.old_where()传递给请求的验证参数。 ..。 首先要说明的是,除了使用certifi.old_where()或升级OpenSSL之外,Python没有其他修复方法。您的系统上的OpenSSL太旧了,无法正确验证交叉签名的TLS证书,而三种方法无法在我的终端解决这个问题。如果使用certifi.old_where(),您的系统将面临很大的风险,因为您将继续将您的信任建立在1024位RSA证书的基础上,这些证书自2012年以来一直被废弃,并且已经受到了几次已知的攻击。
证书医生:
https://pypi.python.org/pypi/certifi
1024位根证书 浏览器和证书管理机构已经得出结论,对于证书,特别是根证书,1024位密钥是不可接受的弱值。由于这个原因,Mozilla从其包中删除了任何弱证书(即1024位密钥),将其替换为来自同一个CA的等效强证书(即2048位或更大密钥)。因为Mozilla从其包中删除了这些证书,所以证书也删除了它们。 不幸的是,OpenSSL的旧版本(小于1.0.2)有时无法验证使用强根的证书链。因此,如果无法使用certifi.where()机制验证证书,则可以通过调用certifi.old_where()来有意地将1024位根重新添加到包中。在生产中不推荐这样做:如果可能的话,您应该升级到更新的OpenSSL。但是,如果您没有其他选择,这可能对您有用。
https://stackoverflow.com/questions/45110498
复制相似问题