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...
一段时间以来,我一直在 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...