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

如何禁用Python请求中的安全证书检查

公羊子真
2023-03-14
import requests
requests.post(url='https://foo.com', data={'bar':'baz'})

但是我得到一个request.exceptions.SSLerror。网站有一个过期的证书,但我没有发送敏感数据,所以对我来说没关系。我会想象有一个像“verifiy=false”这样的论点我可以使用,但我似乎找不到它。

共有1个答案

蔺劲
2023-03-14

从文档中:

如果将verify设置为false,则请求也可以忽略验证SSL证书。

>>> requests.get('https://kennethreitz.com', verify=False)
<Response [200]>

如果您使用的是第三方模块,并且希望禁用检查,这里有一个上下文管理器,它将monkey修补请求并更改它,使verify=false成为默认值并取消警告。

import warnings
import contextlib

import requests
from urllib3.exceptions import InsecureRequestWarning


old_merge_environment_settings = requests.Session.merge_environment_settings

@contextlib.contextmanager
def no_ssl_verification():
    opened_adapters = set()

    def merge_environment_settings(self, url, proxies, stream, verify, cert):
        # Verification happens only once per connection so we need to close
        # all the opened adapters once we're done. Otherwise, the effects of
        # verify=False persist beyond the end of this context manager.
        opened_adapters.add(self.get_adapter(url))

        settings = old_merge_environment_settings(self, url, proxies, stream, verify, cert)
        settings['verify'] = False

        return settings

    requests.Session.merge_environment_settings = merge_environment_settings

    try:
        with warnings.catch_warnings():
            warnings.simplefilter('ignore', InsecureRequestWarning)
            yield
    finally:
        requests.Session.merge_environment_settings = old_merge_environment_settings

        for adapter in opened_adapters:
            try:
                adapter.close()
            except:
                pass
with no_ssl_verification():
    requests.get('https://wrong.host.badssl.com/')
    print('It works')

    requests.get('https://wrong.host.badssl.com/', verify=True)
    print('Even if you try to force it to')

requests.get('https://wrong.host.badssl.com/', verify=False)
print('It resets back')

session = requests.Session()
session.verify = True

with no_ssl_verification():
    session.get('https://wrong.host.badssl.com/', verify=True)
    print('Works even here')

try:
    requests.get('https://wrong.host.badssl.com/')
except requests.exceptions.SSLError:
    print('It breaks')

try:
    session.get('https://wrong.host.badssl.com/')
except requests.exceptions.SSLError:
    print('It breaks here again')
>>> import requests
>>> session = requests.Session()
>>> session.get('https://wrong.host.badssl.com/', verify=False)
/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py:857: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)
<Response [200]>
>>> session.get('https://wrong.host.badssl.com/', verify=True)
/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py:857: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)
<Response [200]>
 类似资料:
  • 我正在尝试编写一个集成测试,其中我们的测试使用Simple启动一个嵌入式HTTPS服务器。我使用创建了一个自签名证书,并且能够使用浏览器(特别是Chrome)访问服务器,并且我确实收到了关于自签名证书的警告。 但是,当我尝试使用Spring RestTemplate进行连接时,我得到了一个ResourceAccessException: 在单元测试之外的本地安装证书不是一个选项,因为这样就需要在每

  • 问题内容: 我正在尝试编写一个集成测试,其中我们的测试使用Simple启动一个嵌入式HTTPS服务器。我使用创建了自签名证书,keytool并能够使用浏览器(特别是Chrome浏览器)访问服务器,并且收到有关自签名证书的警告。 但是,当我尝试使用Spring RestTemplate进行连接时,出现ResourceAccessException: 从其他问题和博客 文章中,我已经看到了Hostna

  • 问题内容: 尝试从中的响应获取SSL证书。 什么是这样做的好方法? 问题答案: 故意包装这样的低级内容。通常,您唯一要做的就是验证证书是否有效。为此,只需通过即可。如果要使用非标准的cacert捆绑包,也可以通过。例如: 另外,主要是围绕其他库的一组包装器,主要是stdlib的(或对于2.x而言)和。 有时候,答案是只是为了获得在较低级别的对象(例如,是),但在许多情况下,这是不可能的。 这就是其

  • 我正在向一个需要SSL证书才能访问的站点发出请求。当我试图访问URL时,我得到SSL证书错误 文件“C:\program files\python37-32\lib\site-packages\requests\sessions.py”,第533行,在request resp=self.send(prep,**send_kwargs)文件“C:\program files\python37-32\

  • 问题内容: 我已经在debian’s中安装了一个自签名的root ca cert并使用安装了它们。在这一点上很高兴,也很高兴,但是python2和python3请求模块坚持认为对证书不满意。 python2: python3 为什么python会忽略系统ca-certificates捆绑包,以及如何集成它? 问题答案: 从http://codingdict.com/questions/664 为了

  • 我已经将一个自签名的根ca证书安装到debian的中,并使用安装它们。此时,true|gnutls-climysite.local感到高兴,true|openssls_client连接mysite.local:443感到高兴,但是python2和python3请求模块坚持认为它对证书不满意。 蟒蛇2: 蟒蛇3