我刚从python.org安装了Python3,在安装带有pip
的包时遇到问题。在设计上,网络上有一个中间人数据包检查设备,它通过使用自己的证书重新注册所有ssl连接来检查所有数据包(包括ssl)。GPO的一部分将自定义根证书推入Windows密钥库。
使用Java时,如果需要访问任何外部https站点,需要手动更新JVM中的cacerts以信任自签名的CA证书。
我如何为python实现这一点?现在,当我尝试使用pip
安装软件包时,可以理解,我得到了非常好的[SSL: CERTIFICATE_VERIFY_FAILED]
错误。
我意识到我可以使用--trusted-host
参数忽略它们,但我不想对我试图安装的每个包都这样做。
有没有办法更新python使用的CA证书存储?
运行:
python -c "import ssl; print(ssl.get_default_verify_paths())"
检查用于验证证书的当前路径。将公司的根证书添加到其中之一。路径
openssl_capath_env
指向环境变量:SSL_CERT_DIR
。如果
SSL_CERT_DIR
不存在,则需要创建它并将其指向文件系统中的有效文件夹。然后,您可以将证书添加到此文件夹中以使用它。自签名证书颁发机构
pip
/conda
在广泛记录了Git(How can I make git accept a self signed certificate?)的一个类似问题之后,我们又在一个公司防火墙后面,一个代理给了我们一个我们应该信任的MitM“攻击”,并且:
tl;博士
但是我们从哪里得到
ca-bundle.crt
?获取最新的CA包
cURL发布了与Mozilla Firefox捆绑在一起的证书颁发机构的摘录
https://curl.haxx.se/docs/caextract.html
我建议您在文本编辑器中打开这个
cacert.pem
文件,因为我们需要将自签名CA添加到此文件中。证书是一个符合X.509的文档,但是它们可以通过几种方式编码到磁盘。下面的文章是一篇很好的读物,但简短的版本是,我们正在处理base64编码,在文件扩展名中通常称为PEM。您将看到它的格式:
https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them
获取我们的自签名证书
以下是一些关于如何获取自签名证书的选项:
通过OpenSSL CLI获取我们的自签名证书
https://unix.stackexchange.com/questions/451207/how-to-trust-self-signed-certificate-in-curl-command-line/468360#468360
通过浏览器获取我们的自签名证书授权
由于这个答案和链接的blog,它显示了(在Windows上)如何查看证书,然后使用base64 PEM编码选项复制到文件的步骤。
复制导出文件的内容并将其粘贴到
cacerts.pem
文件的末尾。为了保持一致性,请重命名此文件
cacerts.pem
-->;ca-bundle.crt
,并将其放置在以下位置:通过Python获取我们的自签名证书授权
感谢所有精彩的回答:
How to get response SSL certificate from requests in python?
我把下面的内容放在一起,试图更进一步。
https://github.com/neozenith/get-ca-py
最后
在pip和conda中设置配置,以便它知道这个CA存储在我们额外的自签名CA中的位置
或者
那么
参考文献
不是最佳答案,但可以使用
pip
的--cert
选项重用已创建的ca包,例如:相关问题 更多 >
编程相关推荐