Python请求以字符串形式发送证书[重复]

2023-12-21

我似乎无法让握手正常工作。

cert = 'path/to/cert_file.pem'
url = 'https://example.com/api'

requests.get(url, cert=cert, verify=True)

当我在本地拥有该文件的地方使用它时,这很好。 我们在 heroku 上托管我们的应用程序并使用环境变量。

请求模块似乎不接受证书作为字符串。例如。

$ export CERTIFICATE="long-list-of-characters"

requests.get(url, cert=get_env('CERTIFICATE'), verify=True)

我也尝试过这样的事情:

cert = tempfile.NamedTemporaryFile()
cert.write(CERTIFICATE)
cert.seek(0)
requests.get(url, cert=cert.name, verify=True)

首先,它可以在本地运行,但不能在heroku上运行。无论如何,这感觉不是一个可靠的解决方案。 我收到 SSL 握手错误。

有什么建议么?


瓦西里的答案在技术上是正确的,尽管它本身并没有回答你的问题。实际上,密钥文件一开始就必须未加密。

我自己刚刚解决了像你这样的情况。你走在正确的道路上;你所要做的就是

1. Pass delete=False to NamedTemporaryFile(),所以调用后文件不会被删除close()

2. close()使用之前的临时文件,因此会保存它

请注意,这是一件非常不安全的事情。delete=False据我了解,即使删除了对文件的引用,文件也会保留在磁盘上。因此,要删除文件,您应该手动调用os.unlink(tmpfile.name).

使用证书执行此操作会带来巨大的安全风险:must确保带有证书的字符串是安全且隐藏的,并且没有人可以访问服务器。

尽管如此,例如,在作为测试环境的 Heroku 服务器上和在云中构建的 Docker 映像中管理您的应用程序时,这是一个非常有用的实践,其中COPY指令不是一个选项。它也绝对比将文件存储在 git 存储库中更好:D

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python请求以字符串形式发送证书[重复] 的相关文章

随机推荐