【问题标题】:SSL InsecurePlatform error when using Requests package使用 Requests 包时出现 SSL InsecurePlatform 错误
【发布时间】:2015-05-19 21:36:08
【问题描述】:

我正在使用 Python 2.7.3 和请求。我通过 pip 安装了请求。我相信这是最新版本。我在 Debian Wheezy 上运行。

我过去曾多次使用 Requests 并且从未遇到过这个问题,但似乎在使用 Requests 发出 https 请求时,我得到了 InsecurePlatform 异常。

错误提到urllib3,但我没有安装它。我确实安装了它以检查它是否解决了错误,但它没有。

/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3
/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not
available. This prevents urllib3 from configuring SSL appropriately and 
may cause certain SSL connections to fail. For more information, see 
https://urllib3.readthedocs.org/en/latest  
/security.html#insecureplatformwarning.

关于我为什么会得到这个的任何想法?我检查了错误消息中指定的文档,但文档说要导入 urllib3 并禁用警告或提供证书。

【问题讨论】:

    标签: python ssl python-requests


    【解决方案1】:

    使用有些隐藏的安全功能:

    pip install requests[security] 要么 pip install pyOpenSSL ndg-httpsclient pyasn1

    这两个命令都安装了以下额外的包:

    • pyOpenSSL
    • 密码学
    • idna

    请注意,python-2.7.9+ 不需要这样做。

    如果pip install 因错误而失败,请检查您的系统中是否安装了libffilibsslpython 所需的开发包使用发行版的包管理器

    • Debian/Ubuntu - python-dev libffi-dev libssl-dev 软件包。

    • Fedora - openssl-devel python-devel libffi-devel 包。

    上面的发行版列表不完整。

    解决方法 (see the original answer by @TomDotTom)

    如果您无法安装某些必需的开发包,还有一个选项可以禁用该警告:

    import requests.packages.urllib3
    requests.packages.urllib3.disable_warnings()
    

    如果您的pip 本身受到InsecurePlatformWarning 的影响并且无法从PyPI 安装任何东西,则可以使用this step-by-step guide 修复它以手动部署额外的python 包。

    【讨论】:

    • 我有请求[安全]、新终端、Python 2.7.3 并且仍然收到此错误
    • 您还需要在系统上为 Ubuntu/Debian 安装额外的库:sudo apt-get install python-dev libffi-dev libssl-dev
    • “pip”本身(从 v6.1 开始)给出相同的安全警告是否可以?
    • 根据你的shell,你可能需要输入pip install 'requests[security]'
    • 在zshell中,需要说:pip install requests\[security\]
    【解决方案2】:

    Requests 2.6 为 2.7.9 之前的 python 用户引入了这个警告,只有股票 SSL 模块可用。

    假设您无法升级到较新版本的 python,这将安装更多最新的 python SSL 库:

    pip install --upgrade ndg-httpsclient 
    

    但是,在某些没有 pyOpenSSL 构建依赖项的系统上,这可能会失败。在 debian 系统上,在上面的 pip 命令之前运行它应该足以构建 pyOpenSSL:

    apt-get install python-dev libffi-dev libssl-dev
    

    【讨论】:

    • 我还需要为 ubuntu 14.04 安装这些包 'python-dev libffi-dev libssl-dev'。
    • 谢谢!我在文档中添加了一条注释:github.com/shazow/urllib3/pull/765
    • @Jessica FTW!非常感谢——这很烦人。
    【解决方案3】:

    我不在生产中使用它,只是一些测试运行器。并重申urllib3 documentation

    如果您知道自己在做什么并想禁用此​​功能并 其他警告

    import requests.packages.urllib3
    requests.packages.urllib3.disable_warnings()
    

    编辑/更新:

    以下也应该有效:

    import logging
    import requests
    
    # turn down requests log verbosity
    logging.getLogger('requests').setLevel(logging.CRITICAL)
    

    【讨论】:

    • 这个解决方案的问题在于它只是简单地压制并忽略了实际问题。此外,这在使用 pip 安装或升级软件包时不起作用。
    • 唯一适用于 ubuntu 1404/Python 2.7.6 的解决方案。谢谢
    【解决方案4】:

    其实你可以试试这个。

    requests.post("https://www.google.com", verify=False)

    您可以阅读请求的代码。

    "C:\Python27\Lib\site-packages\requests\sessions.py"

    class Session(SessionRedirectMixin):
    ......
     def request(self, method, url,
        params=None,
        data=None,
        headers=None,
        cookies=None,
        files=None,
        auth=None,
        timeout=None,
        allow_redirects=True,
        proxies=None,
        hooks=None,
        stream=None,
        verify=None,  # <========
        cert=None):
        """
        ...
        :param verify: (optional) if True, the SSL cert will be verified.
             A CA_BUNDLE path can also be provided.
        ...
        """
    

    【讨论】:

    • 非常小心这样做,不验证证书可能很危险!
    • 当然,不验证证书会很危险。但有时,这是最后的手段。例如:easy_install、apt-get、yum 或 pip...不要运行,或者做一些 Web Crawler...
    • 我在共享主机环境中,因此无法将 python 升级到 2.7.9,也无法使用 pip 安装请求所需的 apt-get 安装 libffi.pc [ security] 和上面的其他 pip 安装变体。所以这个答案对我有用。只要您了解没有https验证页面内容可能会被更改/欺骗的重要警告,我认为这个答案很好。
    【解决方案5】:

    如果您无法升级您的 Python 版本到 2.7.9,并且想要禁止显示警告,

    您可以将您的“请求”版本降级到 2.5.3:

    sudo pip install requests==2.5.3
    

    关于版本: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html

    【讨论】:

    • 请注意,2.5.3 在重定向期间处理 cookie 存在安全问题。
    • 您不应将此答案发布两次,而应将另一个帖子标记为重复。我现在已经这样关闭它了。
    • 由于已知漏洞,我将评论放在 not downgrade 上。
    【解决方案6】:

    这里给出的所有解决方案都没有帮助(我受限于 python 2.6.6)。我在传递给 pip 的简单开关中找到了答案:

    $ sudo pip install --trusted-host pypi.python.org <module_name>
    

    这告诉 pip 可以从 pypi.python.org 抓取模块。

    对我来说,问题在于我公司的防火墙背后的代理,这使它看起来像是某些服务器的恶意客户端。万岁安全。


    更新:见 @Alex 的 answer 用于 PyPi 域的更改,以及可以添加的其他 --trusted-host 选项。 (我会在这里复制/粘贴,但他的回答,所以 +1 他)

    【讨论】:

    • 我终于可以使用这个命令安装 tensorflow,非常感谢!
    【解决方案7】:

    这个答案是不相关的,但如果你想摆脱警告并从请求中获得以下警告:

    InsecurePlatformWarning /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.

    您可以通过在您的 python 代码中添加以下行来禁用它:

    requests.packages.urllib3.disable_warnings()

    【讨论】:

    • 谢谢。其他答案都不适合我。默认情况下会放入如此冗长烦人的消息,这让我大吃一惊。
    【解决方案8】:

    我必须先去bash(来自ZSH)。那么

    sudo -H pip install 'requests[security]' --upgrade
    

    解决了问题。

    【讨论】:

    • 我不确定。我认为这是由于括号
    【解决方案9】:

    上周我在 Ubuntu 14.04(使用 Python 2.7.6)上做了一个 apt-get dist-upgrade,其中包括来自 deb.sury.orglibssl1.1:amd64

    由于我从 cron 作业运行 certbot-auto renew,因此我还使用 --no-self-upgrade 来减少计划外维护。这似乎是麻烦的根源。

    要修复错误,我需要做的就是成为 root(使用su--login 开关)并让certbot-auto 自行升级。即:

    sudo su --login
    /usr/local/bin/certbot-auto renew 
    # ... Upgrading certbot-auto 0.8.1 to 0.18.2... blah blah blah ...
    

    而不是通常从 root 的 crontab 运行:

    5 7 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade
    

    之后,letsencrypt 更新再次正常运行。

    【讨论】:

    • 我遇到了这里描述的相同问题。警告:/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/util/ssl_.py:122:InsecurePlatformWarning:真正的 SSLContext 对象不可用。这会阻止 urllib3 正确配置 SSL,并可能导致某些 SSL 连接失败。您可以升级到更新版本的 Python 来解决这个问题。有关详细信息,请参阅urllib3.readthedocs.io/en/latest/…。 InsecurePlatformWarning 我只需输入命令: sudo apt-get dist-upgrade 错误已修复。
    【解决方案10】:

    对我来说没有工作我需要升级 pip....

    Debian/Ubuntu

    安装依赖项

    sudo apt-get install libpython-dev libssl-dev libffi-dev
    

    升级 pip 并安装包

    sudo pip install -U pip
    sudo pip install -U pyopenssl ndg-httpsclient pyasn1
    

    如果要删除依赖项

    sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev
    sudo apt-get autoremove
    

    【讨论】:

      【解决方案11】:

      我刚刚在 CentOS 5 服务器上遇到了类似的问题,我在 /usr/local 中安装了 python 2.7.12 和一个更旧版本的 python2.7。升级到 CentOS 6 或 7 不是此服务器上的选项。

      一些 python 2.7 模块仍然存在于旧版本的 python,但 pip 未能升级,因为 CentOS 5 软件包不支持较新的加密软件包。

      具体来说,“pip install requests[security]”失败了,因为 CentOS 5 上的 openssl 版本是 0.9.8e,密码学 > 1.4.0 不再支持。

      为了解决我所做的 OPs 原始问题:

      1) pip install 'cryptography<1.3.5,>1.3.0'.  
      

      这安装了可与 openssl-0.9.8e 配合使用的密码学 1.3.4。 cryptograpy 1.3.4 也足以满足以下命令的要求。

      2) pip install 'requests[security]'
      

      现在安装此命令是因为它不会尝试安装密码学 > 1.4.0。

      请注意,在 Centos 5 上,我还需要:

      yum install openssl-devel
      

      允许密码学构建

      【讨论】:

        【解决方案12】:

        以下是它在 Python 3.6 上的工作方式:

        import requests
        import urllib3
        
        # Suppress InsecureRequestWarning: Unverified HTTPS
        urllib3.disable_warnings()
        

        【讨论】:

          【解决方案13】:

          不要安装 pyOpenSSL,因为它很快就会被弃用。目前最好的方法是-

          import requests
          requests.packages.urllib3.disable_warnings()
          

          【讨论】:

            【解决方案14】:

            如果您只想停止不安全的警告,例如:

            /usr/lib/python3/dist-packages/urllib3/connectionpool.py:794: InsecureRequestWarning:正在发出未经验证的 HTTPS 请求。添加 强烈建议进行证书验证。看: https://urllib3.readthedocs.org/en/latest/security.html 不安全请求警告)

            做:

            requests.METHOD("https://www.google.com", verify=False)
            

            验证=假

            是关键,以下不擅长:

            requests.packages.urllib3.disable_warnings()

            urllib3.disable_warnings()

            但是,您必须知道,这可能会导致潜在的安全风险

            【讨论】:

              【解决方案15】:

              我遇到了同样的问题
              麦克
              Pycharm社区版2019.3
              Python 解释器 3.6。
              用 20.0.2 升级 pip 对我有用。
              Pycharm --&gt; Preferences --&gt; Project Interpreter --&gt; click on pip --&gt; specify version 20.0.2 --&gt; Install package

              【讨论】:

                【解决方案16】:

                在我的情况下,我正在处理一个旧的 ubuntu 可信赖映像并尝试安装 python dateutil。我必须首先使用以下命令将 python 升级到 2.7.12:

                add-apt-repository -y ppa:fkrull/deadsnakes-python2.7
                apt-get -y update
                apt install -y --force-yes python2.7-minimal
                pip install python-dateutil
                

                【讨论】:

                  猜你喜欢
                  • 2011-03-01
                  • 1970-01-01
                  • 2014-11-04
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多