当前位置: 首页 > 知识库问答 >
问题:

如何将自定义CA根证书添加到Windows中pip使用的CA存储区?

唐沈义
2023-03-14

我刚从Python.org安装了Python3,但在安装pip包时遇到了困难。根据设计,这里的网络上有一个中间人包检查设备,它通过使用自己的证书放弃所有ssl连接来检查所有包(包括ssl)。GPO的一部分将自定义根证书推入Windows密钥库。

在使用Java时,如果我需要访问任何外部https站点,我需要手动更新JVM中的CACERT,以信任自签名的CA证书。

对于Python如何实现这一点?现在,当我尝试使用pip安装包时,可以理解的是,我会遇到非常好的[ssl:CERTIFICATE_VERIFY_FAILED]错误。

我意识到可以使用--trusted-host参数忽略它们,但我不想对试图安装的每个包都这样做。

是否有方法更新python使用的CA证书存储

共有1个答案

施翰学
2023-03-14

在详细记录了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
  • 直接下载
  • SHA256

我建议您在文本编辑器中打开这个cacert.pem文件,因为我们需要将我们的自签名CA添加到这个文件中。

证书是一种符合X.509的文档,但它们可以通过几种方式编码到磁盘上。下面的文章是一个很好的阅读,但简短的版本是,我们正在处理base64编码,在文件扩展名中通常称为PEM。您将看到它的格式如下:

----BEGIN CERTIFICATE----
....
base64 encoded binary data
....
----END CERTIFICATE----

以下是如何获得自签名证书的几个选项:

  • 通过OpenSSL CLI
  • 通过浏览器
  • 通过Python脚本编写

https://unix.stackexchange.com/questions/451207/how-to-trust-self-signed-certificate-in-curl-command-line/468360#468360

echo quit | openssl s_client -showcerts -servername "curl.haxx.se" -connect curl.haxx.se:443 > cacert.pem
  • 获取您的CA:https://stackoverflow.com/a/50486128/622276
    • http://blog.majcica.com/2016/12/27/installing-self-signated-certifications-into-git-cert-store/

    多亏了这个答案和链接的博客,它展示了(在Windows上)如何查看证书,然后使用base64 PEM编码选项复制到文件的步骤。

    复制导出文件的内容,并将其粘贴到cacerts.pem文件的末尾。

    # Windows
    %USERPROFILE%\certs\ca-bundle.crt
    
    # Linux/macOS
    $HOME/certs/cabundle.crt
    

    我把以下内容放在一起,试图更进一步。

    https://github.com/neozenith/get-ca-py

    在pip和conda中设置配置,以便它知道这个CA存储和我们额外的自签名CA在哪里。

    # Windows
    pip config set global.cert %USERPROFILE%\certs\ca-bundle.crt
    conda config --set ssl_verify %USERPROFILE%\certs\ca-bundle.crt
    
    # Linux / macOS
    pip config set global.cert $HOME/certs/ca-bundle.crt
    conda config --set ssl_verify $HOME/certs/ca-bundle.crt
    
    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'
    

    以下是故障排除指南:

    这是尚未正确设置证书颁发机构时的正常错误html" target="_blank">消息。

    可能有多种因素需要检查:

      null
      null
    python -c "import ssl; print(ssl.get_default_verify_paths())"
    
      null

 类似资料:
  • 我的公司使用它自己的根CA和当我试图拉图像。即使是从私人注册表中,我也会得到错误: 1H 3M 22{kubelet minikube}警告FailedSync错误同步pod,跳过:未能用ErrimagePull为“pod”进行“startcontainer”:“gcr.io/google_containers/pause-amd64:3.0的图像提取失败,这可能是因为此请求没有凭据。

  • 问题内容: 我在Ubuntu 14.04的Docker 1.13.1容器中运行ASP.NET Core 1.1 Web API。 当代码尝试从HTTPS服务器检索某些数据时,出现此证书身份验证错误: HTTPS服务器是内部的,具有由公司CA签名的证书,因此请注意,我可能需要注册内部CA。 到目前为止,我已找到有关该错误的所有信息,并且Docker谈到了使Docker本身运行,连接到存储库等。我的D

  • 问题内容: 我正在使用CLI工具来构建具有很酷的上传功能的混合移动应用程序,因此我可以在设备上测试该应用程序而无需通过应用程序商店(ionic- cli)。但是,在我的公司中,像许多其他公司一样,TLS请求使用我自己在钥匙串(OS X)的计算机上拥有的自定义CA证书重新签名。但是,nodejs不会使用钥匙串来获取其信任的CA列表。我无法控制ionic- cli应用程序,因此无法简单地将{ca:}属

  • 我试图用Java来做这件事,但我认为这是一个一般的证书问题。我有根CA、根CA颁发的中间CA1、中间CA1颁发的中间CA2和中间CA2颁发的证书。 RootCA- 在不知道interCA2的情况下,是否可以通过interCA1验证证书?

  • 问题内容: 我有一个Java应用程序正在访问使用StartCom SSL证书的服务。为此,我需要将StartCom CA证书添加到Java的信任库中,因为默认情况下它们不在其中。我已经使用以下命令在linux上成功完成了此操作 (来自此脚本) 但是,同一命令(经过适当调整)在Windows上不起作用。我得到: 如何使其运作? 问题答案: 这是一个简单的错字。在转换命令时,我在“ trustcace

  • 问题内容: 我需要在公司Intranet上使用Curtom根证书,并将其加载到Mac OS TrustStore(KeyChain)中,才能解决所有浏览器和GUI应用程序的问题。 似乎它甚至可以与Mac OS X附带的版本一起使用,但 不适用于python ,甚至 不适 用于Mac OS 10.12 Sierra(Python 2.7.10)附带的版本。 不过,似乎我会受到: 我该如何解决? 因为