Python TLS证书验证

时间:2018-11-12 17:54:22

标签: python-requests python-3.6 macos-high-sierra

我在运行Python 3.6.6的macos High Sierra环境中使用Tus Py Client 。我正在尝试向tusd服务器发出HTTPS请求。

tusd服务器在具有SSL终止连接的nginx代理后面成功运行。我可以通过SSL / TLS连接在浏览器中成功访问 / files / 端点。

我收到来自的SSL:CERTIFICATE_VERIFY_FAILED错误 发出连接请求时,Tus Py Client 。查看源代码,Tus Py Client 使用requests库发出Web请求:

@_catch_requests_error
    def create_url(self):
        """
        Return upload url.
        Makes request to tus server to create a new upload url for the required file upload.
        """
        headers = self.headers
        headers['upload-length'] = str(self.file_size)
        headers['upload-metadata'] = ','.join(self.encode_metadata())
        resp = requests.post(self.client.url, headers=headers)
        url = resp.headers.get("location")
        if url is None:
            msg = 'Attempt to retrieve create file url with status {}'.format(resp.status_code)
            raise TusCommunicationError(msg, resp.status_code, resp.content)
        return urljoin(self.client.url, url)

如果我从python shell中手动向tusd服务器发出HTTPS请求,并为 verify 参数指定根证书,则我可以成功连接:

import requests
resp=requests.get('https://test.example.com:1081/files',verify=<absolute path to cert file>)

但是,Tus Py Client 似乎没有提供此替代。

我知道Python 3.6+现在具有它自己的内部证书存储,因此可以解释为什么macos密钥存储中的受信任证书会被忽略。

然后,我阅读了requests库的文档。这建议使用 REQUESTS_CA_BUNDLE 环境变量来指定受信任的CA。确实,在将环境变量设置为根CA证书的路径后,我能够使用Tus-Py-Client库发出HTTPS请求。

我在使用此解决方案的道路上是否正确,还是有更好的方法?

亲切问候

dcs3spp

0 个答案:

没有答案