Google 云存储 URL 签名者返回 SSL3_GET_SERVER_CERTIFICATE

Google cloud storage URL signer returning SSL3_GET_SERVER_CERTIFICATE

一段时间以来,我一直在 signing GCS urls 成功使用以下脚本。

它基本上只是 python 请求模块的包装器,它根据提供的私钥向 url 添加签名。

    md5_digest = base64.b64encode(hashlib.md5(data).digest())
    base_url, query_params = self._MakeUrl('PUT', path, content_type,
                                           md5_digest)
    headers = {}
    headers['Content-Type'] = content_type
    headers['Content-Length'] = str(len(data))
    headers['Content-MD5'] = md5_digest
    return self.session.put(base_url, params=query_params, headers=headers,
                            data=data)

我使用了一个将 p12 密钥转换为 pem 的服务帐户,并且能够存储和获取资源。

几天前(2015 年 12 月),它停止工作并且 returns 来自 python 请求模块的以下错误:

requests.exceptions.SSLError: [Errno 1] _ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

禁用请求验证帮助我解决了这个问题,但这不是一个有效的解决方案。

self.session.verify = False

对于可能导致此问题的原因有什么想法吗?现在是什么触发了这个?

谢谢

事实证明,问题出在名为 certifi 的包上,该包是我项目中另一个包的要求安装的。

certifi 包与请求模块集成。使用旧版本的 openssl 不同意它,这是许多常见 url(甚至 requests.get('https://www.google.com'))失败并出现此错误的原因。

解决方案可能是升级 OS、仅更新 openssl 或删除 certifi 包(这会导致一些漏洞)。

欢迎关注trail...