Eri*_* B. 56 python windows ssl pip
我刚刚从python.org安装了Python3,并且无法安装包pip.根据设计,网络上有一个中间人的数据包检测设备,通过使用自己的证书重新签名所有ssl连接来检查所有数据包(包括ssl).部分GPO将自定义根证书推送到Windows密钥库.
使用Java时,如果我需要访问任何外部https站点,我需要手动更新JVM中的cacerts以信任自签名CA证书.
我如何为python实现这一目标?现在,当我尝试安装软件包时pip,可以理解,我得到了很多[SSL: CERTIFICATE_VERIFY_FAILED]错误.
我意识到我可以使用--trusted-host参数忽略它们,但我不想为我正在尝试安装的每个包执行此操作.
有没有办法更新python使用的CA证书存储?
Jos*_*eak 59
pip/conda在用Git广泛记录类似的问题之后(我怎样才能让git接受自签名证书?),在这里我们再次在公司防火墙后面用代理给我们一个我们应该信任的MitM"攻击",并且:
永远不要禁用所有SSL验证!
这会产生糟糕的安全文化.不要那个人.
pip config set global.cert path/to/ca-bundle.crt
pip config list
conda config --set ssl_verify path/to/ca-bundle.crt
conda config --show ssl_verify
# Bonus while we are here...
git config --global http.sslVerify true
git config --global http.sslCAInfo path/to/ca-bundle.crt
Run Code Online (Sandbox Code Playgroud)
但是我们从哪里来ca-bundle.crt?
cURL发布了与Mozilla Firefox捆绑在一起的证书颁发机构的摘录
https://curl.haxx.se/docs/caextract.html
我建议您cacert.pem在文本编辑器中打开此文件,因为我们需要将自签名CA添加到此文件中.
证书是符合X.509的文档,但它们可以通过几种方式编码到磁盘.下面的文章是一个很好的阅读,但简短的版本是我们正在处理base64编码,它通常在文件扩展名中称为PEM.您将看到它具有以下格式:
----BEGIN CERTIFICATE----
....
base64 encoded binary data
....
----END CERTIFICATE----
Run Code Online (Sandbox Code Playgroud)
以下是有关如何获取自签名证书的一些选项:
echo quit | openssl s_client -showcerts -servername "curl.haxx.se" -connect curl.haxx.se:443 > cacert.pem
Run Code Online (Sandbox Code Playgroud)
感谢这个答案和链接的博客,它显示了如何查看证书然后使用base64 PEM编码选项复制到文件的步骤(在Windows上).
复制此导出文件的内容并将其粘贴到cacerts.pem文件末尾.
为了保持一致性,请重命名此文件cacerts.pem- > ca-bundle.crt并将其放置在容易的地方:
# Windows
%USERPROFILE%\certs\ca-bundle.crt
# or *nix
$HOME/certs/cabundle.crt
Run Code Online (Sandbox Code Playgroud)
感谢所有出色的答案:
我把以下内容放在一起,试图更进一步.
https://github.com/neozenith/get-ca-py
在pip和conda中设置配置,以便它知道此CA存储在我们的额外自签名CA中的位置.
pip config set global.cert %USERPROFILE%\certs\ca-bundle.crt
conda config --set ssl_verify %USERPROFILE%\certs\ca-bundle.crt
Run Code Online (Sandbox Code Playgroud)
要么
pip config set global.cert $HOME/certs/ca-bundle.crt
conda config --set ssl_verify $HOME/certs/ca-bundle.crt
Run Code Online (Sandbox Code Playgroud)
然后
pip config list
conda config --show ssl_verify
# Hot tip: use -v to show where your pip config file is...
pip config list -v
# Example output for macOS and homebrew installed python
For variant 'global', will try loading '/Library/Application Support/pip/pip.conf'
For variant 'user', will try loading '/Users/jpeak/.pip/pip.conf'
For variant 'user', will try loading '/Users/jpeak/.config/pip/pip.conf'
For variant 'site', will try loading '/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/pip.conf'
Run Code Online (Sandbox Code Playgroud)
rfk*_*aas 33
运行:python -c "import ssl; print(ssl.get_default_verify_paths())"检查用于验证证书的当前路径.将您公司的根证书添加到其中一个.
该路径openssl_capath_env指向环境变量:SSL_CERT_DIR.
如果SSL_CERT_DIR不存在,则需要创建它并将其指向文件系统中的有效文件夹.然后,您可以将证书添加到此文件夹以使用它.
nt8*_*t86 12
Windows 上的替代解决方案是安装 python-certifi-win32,它允许 Python 使用 Windows 证书存储。
pip install python-certifi-win32
Run Code Online (Sandbox Code Playgroud)
不是最佳答案,但您可以使用--cert选项重用已创建的ca包pip,例如:
pip install SQLAlchemy==1.1.15 --cert="C:\Users\myUser\certificates\my_ca-bundle.crt"
Run Code Online (Sandbox Code Playgroud)
在 Windows 上,我通过在 %APPDATA%\pip\ 中创建一个 pip.ini 文件来解决它
例如 C:\Users\asmith\AppData\Roaming\pip\pip.ini
在 pip.ini 我把我的证书的路径:
[global]
cert=C:\Users\asmith\SSL\teco-ca.crt
Run Code Online (Sandbox Code Playgroud)
https://pip.pypa.io/en/stable/user_guide/#configuration有关于配置文件的更多信息。
| 归档时间: |
|
| 查看次数: |
82239 次 |
| 最近记录: |