首页 > 编程问答 >如何让 Python 请求信任自签名 SSL 证书?

如何让 Python 请求信任自签名 SSL 证书?

时间:2024-07-30 16:33:34浏览次数:14  
标签:python ssl python-requests

import requests
data = {'foo':'bar'}
url = 'https://foo.com/bar'
r = requests.post(url, data=data)

如果 URL 使用自签名证书,则会失败

requests.exceptions.SSLError: [Errno 1] _ssl.c:507: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我知道我可以将 False 传递给 verify 参数,如下所示:

r = requests.post(url, data=data, verify=False)

但是,我想要做的是将请求指向磁盘上的公钥副本并告诉它信任该证书。


可以按照以下步骤在 Python Requests 中信任自签名证书:

1. 获取自签名证书:

可以通过多种方式获取证书,具体取决于的设置:

  • 从浏览器下载: 导航到使用该证书的网站,单击地址栏中的锁图标,查看证书详细信息并将其导出为 PEM 格式。
  • 使用 OpenSSL 命令: 如果有权访问服务器,可以使用以下命令获取证书: bash openssl s_client -showcert -connect example.com:443 < /dev/null | openssl x509 -outform PEM > certificate.pem example.com:443 替换为的域名和端口。

2. 使用 verify 参数指定证书路径:

在的 Python 代码中,将证书文件的路径传递给 verify 参数:

import requests

url = 'https://foo.com/bar'
data = {'foo': 'bar'}

# 将 'path/to/certificate.pem' 替换为证书文件的实际路径
r = requests.post(url, data=data, verify='path/to/certificate.pem')

# 检查响应
print(r.text)

这将告诉 Requests 使用提供的证书来验证服务器的 SSL 证书。

重要提示:

  • 安全风险: 禁用 SSL 验证或信任自签名证书会使的应用程序面临安全风险。仅当完全控制服务器并在测试环境中工作时才这样做。
  • 证书路径: 确保提供证书文件的正确路径。
  • 证书格式: Requests 库支持 PEM 格式的证书。如果的证书采用其他格式,请先将其转换为 PEM。

通过这些步骤,就可以在不完全禁用 SSL 验证的情况下,让的 Python Requests 代码信任自签名证书。但是,请记住相关的安全风险,并尽可能使用受信任的证书颁发机构签署的证书。

标签:python,ssl,python-requests
From: 30405867

相关文章

  • python 偏函数
    如下代码loop=tornado.ioloop.IOLoop.current()ctx=contextvars.copy_context()func_call=functools.partial(ctx.run,func,*args,**kwargs)returnawaitloop.run_in_executor(executor,func_call)偏函数一个函数作为模板,通过提供部分参数来产生一个新的函数。......
  • Chapter 18 Python异常
    欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!文章目录前言一、什么是异常二、捕获异常三、异常的传递前言在Python中,异常是一种特定的对象,能够在程序运行过程中被抛出和处理。有效地管理异常不仅可以增强程序的稳定性,还可以提高用户体验,使程......
  • Python正则表达式匹配数字的第一次重复
    示例:For0123123123,1应匹配,因为第二个1出现在任何其他数字重复之前。For01234554321,5应该匹配,因为第二个5出现在任何其他数字的重复之前。我尝试过的一些正则表达式:......
  • 当 python 极坐标中某些列条目为空时,如何分解 List[_] 列?
    给定如下所示的Polarsdf,如何在两列上调用explode(),同时将空条目扩展到正确的长度以与其行匹配?shape:(3,2)┌───────────┬─────────────────────┐│x┆y││---┆---......
  • 使用Nginx Proxy Manager配置Halo的反向代理和申请 SSL 证书
    本文介绍NginxProxyManager配置Halo的反向代理和申请SSL证书,如需要了解Halo2的安装,参考如何在Linux云服务器上通过DockerCompose部署安装Halo,搭建个人博客网站?。目录安装NginxProxyManagerNginxProxyManager安装新建docker-compose.yaml启动NPM配置Halo的反向代理申......
  • 使用python从网站自动下载pdf时出错
    我想从一个名为epadossier.nl的网站自动批量下载pdf我用谷歌搜索了这个并找到了一段代码并修复了一个小错误。所以现在我得到了这个`importrequestsurl="https://www.epadossier.nl/adres/plaats/straat/num"response=requests.get(url)ifresponse.status_cod......
  • 避免字符串连接的嵌套循环的 Pythonic 方法
    我想找到所有5位数字的字符串,其中前三位数字在我的第一个列表中,第二个槽第四个数字在我的第二个列表中,第三到第五个数字在我的最后一个列表中:l0=["123","567","451"]l1=["234","239","881"]l2=["348","551","399"......
  • Python 环境配置(二)安装jupyter、matplotlib、numpy库
    Python环境配置(二)安装jupyter、matplotlib、numpy库一、numpypipinstallnumpy二、matplotlibpipinstallmatplotlib三、jupyter1、anaconda自带Jupyter2、pycharm插件只有Pycharm的Professional版才支持JupyterNotebook,请注意版本3、新建文件#%......
  • 如何使用 PIPE 并行运行 python 子进程?
    我正在使用inkscape将一堆SVG图像转换为PNG。单线程:importsubprocessimporttimeimportosinkscape_path=r'C:\ProgramFiles\Inkscape\bin\inkscape.com'steps=30filenames=[]processes=[]#t_start=time.process_time()t_start=time.time()f......
  • Python sqlite3 删除数据
    要从SQLite表中删除记录,你需要使用DELETEFROM语句。要删除特定的记录,你需要同时使用WHERE子句。要更新特定的记录,你需要同时使用WHERE子句。语法以下是SQLite中DELETE查询的语法- DELETEFROMtable_name[WHEREClause]PythonCopy例子假设我们使用以下查询创建了......