我在运行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