【问题标题】:Can I turn off Python (PiP) SSL cert validation with an ENV variable?我可以使用 ENV 变量关闭 Python (PiP) SSL 证书验证吗?
【发布时间】:2016-01-05 15:47:48
【问题描述】:

我有一个非常糟糕的网络,它使用 MITM 证书来窥探每个人的车队。这意味着我需要将其关闭,例如,在我使用 export NODE_TLS_REJECT_UNAUTHORIZED="0" 的节点中。

在 Python 中是否有类似的方法来解决这个问题?


假装我缺乏安全性(我就是)。在我的节点示例中,我只配置一个环境变量并完成。这让我使用了一个 pem 文件(我不知道从哪里得到)。我尝试下载证书链,但无法将其放入 pem 文件。真的没有更直接的方法可以做到这一点吗?老实说,网络的设置方式我认为我什至不能只导入一个证书。


我试过用这个...

pip3 install itsdangerous --proxy=http://proxy.me.com:80 --index-url=http://pypi.python.org/simple/

Getting page http://pypi.python.org/simple/
Could not fetch URL http://pypi.python.org/simple/: timed out
Will skip URL http://pypi.python.org/simple/ when looking for download links for itsdangerous
Cannot fetch index base URL http://pypi.python.org/simple/

感谢我们的代理,仍然确认这不是红鲱鱼。


我还尝试添加HTTP_PROXYHTTPS_PROXY 而不是命令行选项。还是得到如下结果...

  pip3 install itsdangerous --index-url=http://pypi.python.org/simple/
  ...
  Downloading/unpacking itsdangerous
  Getting page http://pypi.python.org/simple/itsdangerous/
  Could not fetch URL http://pypi.python.org/simple/itsdangerous/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)
  Will skip URL http://pypi.python.org/simple/itsdangerous/ when looking for download links for itsdangerous
  Getting page http://pypi.python.org/simple/
  Could not fetch URL http://pypi.python.org/simple/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)

也可能很重要...

pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.4)

【问题讨论】:

  • the answers to this question中提供了多种绕过 SSL 验证或解决此问题的选项。
  • 假装我缺乏安全性(我就是)。在我的节点示例中,我只配置一个环境变量并完成。这让我使用了一个 pem 文件(我不知道从哪里得到)。我尝试下载证书链,但无法将其放入 pem 文件。真的没有更直接的方法可以做到这一点吗?老实说网络的设置方式我认为我什至不能只导入一个证书
  • 需要通过代理吗? --proxy 可能不适合你,所以你必须设置环境变量 http_proxyhttps_proxyexport http_proxy=http://proxy.me.com:80export https_proxy=http://proxy.me.com:80 并再次运行 pip
  • 尝试添加那些环境变量相同的结果

标签: python python-3.x pip


【解决方案1】:

我的网络也有同样的问题。我这样做是为了安装枕头:

pip install Pillow --trusted-host pypi.python.org --index-url=http://pypi.python.org/simple/

...它对我很有用。希望对您有所帮助。

【讨论】:

  • 使用 --index-url=https://pypi.python.org/simple/ 为我工作。我正在使用公司代理服务器。
  • --trusted-host pypi.org--trusted-host files.pythonhosted.org为我。添加了-v 以启用详细信息以显示位置。
  • 我需要改用--trusted-host pypi.org。可能 URL 已更改
【解决方案2】:

当我需要忽略证书验证链时,我使用了以下代码:

import ssl

        try:
            _create_verified_https_context = ssl._create_default_https_context
            _create_unverified_https_context = ssl._create_unverified_context
        except AttributeError:
            pass
        else:
            # Handle target environment that doesn't support HTTPS verification. Save
            # a reference to the previous method so it is still available if needed.
            ssl._create_default_https_context = _create_unverified_https_context
            if not hasattr(ssl, '_create_verified_https_context'):
                ssl._create_verified_https_context = _create_verified_https_context

上面的代码会告诉你的 SSL 实例在你的 python 中忽略未验证的错误。您还可以直接修改 SSL.py 文件以更改行为。

您可能还想看看:https://docs.python.org/3/library/ssl.html#ssl.SSLContext

【讨论】:

  • 你是认真的吗,我到底应该把这个放在哪里,这比我要找的要复杂得多对不起,伙计。因此环境变量要求
猜你喜欢
  • 2010-11-08
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 2023-03-17
  • 2013-10-20
  • 2017-07-19
相关资源
最近更新 更多