我正在使用requests
来使用https协议中的Web服务。我曾经通过将verify
设置为证书的文件路径来验证服务器证书。
但是现在我想将服务器证书存储到数据库中。在运行时,证书将作为字符串加载到内存中。
问题是是否可以将服务器证书作为字符串传递给requests
。
还有一个想法:是否可以将verify
指向云存储中的证书文件,例如Amazon S3,Google存储等?
答案 0 :(得分:2)
据我所知,不,verify
应该是布尔值,或证书文件的路径,或者是包含证书的目录的路径。没有简单的方法来规避这一点。
您可以从数据库中检索证书,将其写入临时文件,然后将临时文件的路径传递给requests
。
from tempfile import NamedTemporaryFile
with NamedTemporaryFile() as f:
f.write(get_cert_from_db())
f.flush() # ensure all data written
r = requests.get(url, verify=f.name)
一旦退出上下文管理器(使用with
创建)的范围,临时文件将自动关闭并删除。该文件确实存在于磁盘上,直到它关闭,因此可以被其他进程查看,因此您需要考虑该证书是否可以接受。