【发布时间】:2017-07-14 19:40:02
【问题描述】:
尝试向 GCM API 发出 Python 请求,但未验证证书。
请求和证书包已更新
- Python 2.7.6
- 证书==2017.4.17
- 请求==2.18.1
- pyOpenSSL==17.1.0
尝试调用其他服务器,返回都OK:
- r = requests.get('https://graph.facebook.com/spotify') [OK]
- r = requests.get('https://graph.facebook.com/spotify', verify=certifi.where()) [OK]
- r = requests.get('https://gcm-http.googleapis.com') [NOK]
- r = requests.get('https://gcm-http.googleapis.com', verify=certifi.where()) [NOK]
错误消息:错误的握手:Error([('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')],)
【问题讨论】:
-
错误握手通常与证书验证无关,但更多与 TLS 协议版本不匹配、密码、缺少 SNI、缺少客户端证书或类似情况有关。
-
@SteffenUllrich 我已经更新了确切的错误消息。问题不在于证书“验证”,而在于验证。顺便说一句,你是对的,与证书验证无关。证书可能有效,但程序无法验证。
-
谢谢。尽可能获得最详细的错误描述总是好的。基于此,我很确定这是我为重复添加的问题中的确切问题,即您的旧 OpenSSL 版本的问题与替代链验证结合缺少您商店中的旧根证书。 @bpscott 使用
certifi.old_where()的建议可能有助于解决此问题。
标签: python ssl google-api