Python 请求出现 SSL 错误

2023-12-24

尝试使用请求会话发出简单的获取请求,但我不断收到特定站点的 SSL 错误。我认为问题可能出在该网站(我使用https://www.ssllabs.com https://www.ssllabs.com,结果如下),但我不能确定,因为我在这方面没有知识:)我肯定想了解发生了什么。

解决方案/解释会很棒, 谢谢!

代码:

import requests

requests.get('https://www.reporo.com/')

我收到下一个错误:

SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]

---------------------------------------------------------------------------
SSLError                                  Traceback (most recent call last)
<ipython-input-7-cfc21b287fee> in <module>()
----> 1 requests.get('https://www.reporo.com/')

/usr/local/lib/python2.7/dist-packages/requests/api.pyc in get(url, **kwargs)
     63 
     64     kwargs.setdefault('allow_redirects', True)
---> 65     return request('get', url, **kwargs)
     66 
     67 

/usr/local/lib/python2.7/dist-packages/requests/api.pyc in request(method, url, **kwargs)
     47 
     48     session = sessions.Session()
---> 49     response = session.request(method=method, url=url, **kwargs)
     50     # By explicitly closing the session, we avoid leaving sockets open which
     51     # can trigger a ResourceWarning in some cases, and look like a memory leak

/usr/local/lib/python2.7/dist-packages/requests/sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    459         }
    460         send_kwargs.update(settings)
--> 461         resp = self.send(prep, **send_kwargs)
    462 
    463         return resp

/usr/local/lib/python2.7/dist-packages/requests/sessions.pyc in send(self, request, **kwargs)
    571 
    572         # Send the request
--> 573         r = adapter.send(request, **kwargs)
    574 
    575         # Total elapsed time of the request (approximately)

/usr/local/lib/python2.7/dist-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
    429         except (_SSLError, _HTTPError) as e:
    430             if isinstance(e, _SSLError):
--> 431                 raise SSLError(e, request=request)
    432             elif isinstance(e, ReadTimeoutError):
    433                 raise ReadTimeout(e, request=request)

SSLError: [Errno bad handshake] [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]

我进行了扫描https://www.ssllabs.com https://www.ssllabs.com并得到以下结果:

SSL Report: reporo.com
Assessed on:  Sun Feb 22 21:42:57 PST 2015 | Clear cache Scan Another >>

    Server  Domain(s)   Test time   Grade
1   154.51.128.13 
Certificate not valid for domain name 
reporo.com
Sun Feb 22 21:40:53 PST 2015 
Duration: 9.167 sec -
2   198.12.15.168 
protected.ddosdefend.com 
Ready 
www.reporo.com

Sun Feb 22 21:41:02 PST 2015 
Duration: 115.189 sec   
F

www.reporo.com(不是 reporo.com)的证书本身有效,但缺少链证书,如报告中所示:

Chain issues    Incomplete
....
2   Extra download  Thawte DV SSL CA 
Fingerprint: 3ca958f3e7d6837e1c1acf8b0f6a2e6d487d6762 

“不完整”和“额外下载”是重点。某些浏览器会缓存缺失的链证书,其他浏览器会进行下载,而其他浏览器则会失败。如果您使用新的 Firefox 配置文件(没有缓存任何证书)尝试该网站,它也会失败。

您可以下载缺少的链证书并将其用作受信任的 CA 证书verify请求的参数。不要只是禁用验证,因为这样您就容易受到中间人攻击。

分步说明:

  • 下载缺少的证书:https://ssl-tools.net/certificates/vqgvhb-thawte-dv-ssl-ca https://ssl-tools.net/certificates/vqgvhb-thawte-dv-ssl-ca(通过搜索 SSLLabs 报告中给出的指纹找到)。下载 PEM 格式的文件,即https://ssl-tools.net/certificates/3ca958f3e7d6837e1c1acf8b0f6a2e6d487d6762.pem https://ssl-tools.net/certificates/3ca958f3e7d6837e1c1acf8b0f6a2e6d487d6762.pem.
  • 下载根证书:https://ssl-tools.net/certificates/91c6d6ee3e8ac86384e548c299295c756c817b81.pem https://ssl-tools.net/certificates/91c6d6ee3e8ac86384e548c299295c756c817b81.pem(也可以通过搜索指纹找到)。
  • 将两个文件合并到一个新文件中chain.pem。确保每个文件都以有效的行结束符结尾(下载时并非如此)。生成的文件应该看起来像像这样 http://pastebin.com/1Cku38LH.
  • 将您的呼叫修改为

    requests.get('https://www.reporo.com/', verify = 'chain.pem')
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 请求出现 SSL 错误 的相关文章

  • 如何使用python从文件夹中的pdf中提取文本并将其保存在数据框中?

    我有很多文件夹 每个文件夹都有几个 pdf 文件 也有其他文件类型 如 xlsx 或 doc 我的目标是提取每个文件夹的pdf文本并创建一个数据框 其中每条记录都是 文件夹名称 每列以字符串形式表示该文件夹中每个pdf文件的文本内容 我设法
  • ptb_word_lm中batch_size的含义(tensorflow的LSTM模型)

    我是张量流的新手 我现在对它的含义有点困惑batch size 众所周知 其含义是batch size是每批次的样本数 但是根据中的代码ptb word lm 似乎不是 读者 py data len tf size raw data the
  • 使用 matplotlib 在图像数据之上对线网格进行像素精确定位

    我试图在 python 库 matplotlib 显示的图像网格顶部精确地覆盖 1 像素宽线的网格 不幸的是 我似乎无法对结果进行足够精细的控制 以实现线网格与数据网格的正确对齐 如下面的代码所示 结果似乎总是很接近 但并不完全正确 我尝试
  • 如何在Python中获得更精确的十进制值[重复]

    这个问题在这里已经有答案了 from math import sqrt a 1e 8 b 10 c 1e 8 x1 b sqrt b 2 4 a c 2 a x2 b sqrt b 2 4 a c 2 a print x1 format x
  • pandas:使用运算符链接过滤 DataFrame 的行

    大多数业务在pandas可以通过操作符链接来完成 groupby aggregate apply等 但我发现过滤行的唯一方法是通过普通的括号索引 df filtered df df column value 这没有吸引力 因为它需要我分配d
  • 如果新文件不存在则写入新文件,如果存在则追加到文件

    我有一个程序可以写入用户的highscore到一个文本文件 该文件由用户选择时命名playername 如果具有该特定用户名的文件已经存在 那么程序应该附加到该文件 以便您可以看到多个highscore 如果具有该用户名的文件不存在 例如
  • 在Python中将距离矩阵转换为成对距离列表[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设Python中有以下距离矩阵 0 1 2 3 0 0 1 4 8 1 1 0 3 7 2 4 3 0 3 3 8 7 3 0 我想
  • Plotly - 不同颜色的表面

    我正在尝试在 Plotly for Python 中绘制多个曲面 每个曲面具有不同的颜色 具体来说 表面显示了在相空间中不同点采取行动的预测奖励函数 由于我在每个点都有多个可能的操作 因此每个点都是不同的表面 我想对每个表面进行独特的着色
  • 如何在python包中包含.pyx文件

    我在我的包中使用了 cythonpyirt https github com 17zuoye pyirt 但是当我将其发布到 pypi 时 pyx 文件不包含在 tar gz 中 我认为这一定与安装文件有关 但是 我找不到解决这个问题的方法
  • 在python中浏览ftp目录

    我正在尝试使用 ftplib 使用 Python 3 从 ftp 服务器下载多个文件夹 我有一个文件夹名称列表 它们都位于文件夹 root 中 问题是我不知道如何浏览它们 当我使用cwd我可以进入更深的目录 但是如何再次起来呢 我正在尝试得
  • 检查对象是否是字符串列表的列表?

    是什么elegant检查对象是否是字符串列表列表的方法 没有嵌套循环 也许这里必须是构造结构化迭代的常规方法 UPD 像这样的东西 l a b c d 1 3 e 2 f def recurse iterable levels result
  • 如何读取 sql 查询到 pandas dataframe / python / django

    我在下面使用这个views py获取应用程序 from django db import connection def test request cursor connection cursor sql SELECT x n from ta
  • 中断QThread睡眠

    我想知道如何暂停 QThread 然后在收到信号时恢复 我已阅读并知道我可以做这样的事情 def run self self ready False while not self ready self sleep 1 QtCore Slot
  • 继承类中的python __init__方法[重复]

    这个问题在这里已经有答案了 我想为子类提供一些额外的属性 而不必显式调用新方法 那么有没有办法给继承的类一个 init 不重写的类型方法 init 父类的方法 我编写下面的代码纯粹是为了说明我的问题 因此属性等的命名很糟糕 class in
  • Django 自定义查询集过滤器

    在 Django 中 是否有一种标准方法可以为查询集编写复杂的自定义过滤器 就像我能写的一样 MyClass objects all filter field val 我想做这样的事情 MyClass objects all filter
  • Django 中同一个模型的多个多对多关系

    给定以下具有两个多对多关系的模型 class Child models Model name models CharField max length 80 class Foo models Model bar models ManyToMa
  • 使用 pyinstaller 制作的可执行文件出现运行时错误

    所以我使用 Pygame 制作了一个游戏 现在我想用它制作一个可执行文件 首选独立可执行文件 所以我用它来制作可执行文件 pyinstaller onefile main py 编译顺利 但运行时出现错误 这是错误 Traceback mo
  • FileAllowed 不显示错误消息

    我正在使用 WTForms 我正在对文件上传应用验证 并将其限制为仅 jpg png 和 pdf 格式 但是 如果我输入不正确 则不会出现错误消息 我按照这个教程https flask wtf readthedocs io en stabl
  • 带有客户端认证连接的 HTTP 客户端的 SOAP 请求超时异常

    我正在尝试点击具有客户端认证的网址并生成密钥 keytool genkey alias server keyalg RSA keystore example jks validity 10950 和密钥存储 keytool import t
  • 如果我更改当前工作目录,为什么 __file__ 会变成无效路径?

    执行中test py from tmp import os print os path abspath file os chdir var print os path abspath file output tmp test py var

随机推荐

  • 无法在 Instruments 中启动我的应用程序:至少有一个目标无法启动

    我已正确设置所有代码签名权利 在我的手机上运行该应用程序没问题 但在仪器中启动它会出现错误消息 Error Starting Recording At least one target failed to launch aborting r
  • 如何删除文件的最后 N 行?

    有人可以给出一些关于如何从 Perl 中的文件中删除最后 n 行的提示吗 我有一个大约 400 MB 的非常大的文件 我想从中删除最后 125 000 行 您可以使用领带 文件 http search cpan org dist Tie F
  • 如何在pygame中获取键盘输入?

    我正在 pygame 1 9 2 中制作游戏 这是一款失败的简单游戏 其中一艘船在五列坏人之间移动 这些坏人通过缓慢向下移动进行攻击 我试图让船用左右箭头键左右移动 这是我的代码 keys pygame key get pressed if
  • 将 Flask 中的默认 url 更改为 static-media

    我使用了一个网站Flask http flask pocoo org 我可以毫无问题地让内置开发服务器上的东西正常工作 我还能够在我的生产服务器上的 mod wgsi 下运行 但是 我从一个托管我的静态媒体静态 CGI PHP 5 2 ht
  • 如何通过 PHP 将网站中的整个数字替换为波斯数字?

    如何通过 PHP 将正文或网站 html 中的整个数字替换为波斯数字 我想替换我网站中所有页面的所有数字 Code function ta persian num string arrays of persian and latin num
  • 完成多项任务的批处理文件或 vbscript

    我希望对一些进口进行一些自动化 我正在寻找一种方法来调用多个脚本以从一个批处理文件或 vbscript 运行 我想做的是以下内容 1 重命名批量完成的文件 2 将重命名的文件移动到另一个文件夹 3 替换文件中指定的文本 4 使用日期扩展名重
  • Angular CLI:从现有项目生成 SASS 项目

    我开始研究 Angular CLI 生成的项目 并意识到我忘记了 style sass旗帜 有什么办法可以convert我的项目如何使用 Angular CLI 启用 SASS 在 Angular 6 中 如果您在执行此操作后收到控制台警告
  • 将数据从 Angular 模态控制器传递回主控制器

    事情是这样的 我无法将数据从角度模态传递回我需要的控制器 下面给出的代码 控制器侧 use strict var DataMod angular module Data angularGrid ui bootstrap contextMen
  • Java 中的 Arima/Arma 时间序列模型 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 java 中的 Arima 时间序列模型 有没有实现 Arima Arma 模型的 Java 库 谷歌搜索应该有帮助 我从谷歌
  • React功能组件中使用和不使用useEffect的区别

    我有一个 React 功能组件 我想在每个 render 中运行一些代码 你知道useEffect没有依赖数组的钩子每次在渲染时都会运行 这是代码 function Component a b useEffect gt console lo
  • 在 ActionBar 上显示 SearchView 的软键盘

    我们在 ActionBar 上有一个 SearchView 它被设置为非图标化 由于在用户输入要搜索的内容之前视图中没有任何内容 因此为 SearchView 提供初始焦点是有意义的 并确保软键盘已准备好供用户输入文本 否则他们 总是必须先
  • 在 monad 内部工作时如何编写尾递归函数

    一般来说 在 内部 单子工作时 我在弄清楚如何编写尾递归函数时遇到问题 这是一个简单的例子 这是我编写的一个小示例应用程序 旨在更好地理解 Scala 中的 FP 首先 系统会提示用户输入Team由 7 组成Players 该函数递归读取输
  • 我想要 410 整个目录 - 我删除了我的博客

    我的网站上有一个名为 blog 的文件夹 我把它全部永久删除了 我要410吧 我如何 410 整个文件夹 例如我的网站看起来像这样 example com blog mycoolpost1 example com blog mycoolpo
  • 为什么 Python 项目中没有用于自动化的 Makefile?

    作为一名资深的 Python 程序员 我想知道 Python 文化的一个核心方面是否让我困惑了很长时间 除了 Makefile 我们还能做什么 我见过的大多数 ruby 项目 不仅仅是 Rails 都使用Rake 不久之后node js开始
  • Tampermonkey:触发事件对元素不起作用

    我试图在提供者角度应用程序之上使用 Tampermonkey 添加一些功能 但我坚持这个简单的事情 我无法使用 CodePen 重现该问题 因此我们必须寻求理论和建议 我会尽力做到具体 在页面加载时添加此间隔 以检查 id 为serialN
  • 如果 PHP 文件回显“true”,则 jQuery 刷新

    我希望我的页面每隔几秒检查一次 PHP 文件是否返回 true 并在 PHP 文件返回 true 时刷新某个 div 目前我有这个 它不起作用 并且适用于完整页面而不是 div 我希望仅刷新 div 而不是完整页面
  • 使用远程 XML 作为文件 [重复]

    这个问题在这里已经有答案了 可能的重复 如何从 java 中的 URL 读取 XML 响应 https stackoverflow com questions 2310139 how to read xml response from a
  • x86-64 SysV ABI 中参数和返回值寄存器的高位是否允许存在垃圾?

    x86 64 SysV ABI 指定了函数参数如何在寄存器中传递 第一个参数rdi then rsi等等 以及整数返回值如何传回 在rax进而rdx对于非常大的值 然而 我找不到的是 当传递小于 64 位的类型时 参数或返回值寄存器的高位应
  • 使用 API 将基于坐标的日出/日落导入 Google Sheet

    我花了大约 5 个小时试图解决这个问题 但我陷入了最后一点 到目前为止 我已经能够调用https sunrise sunset org api https sunrise sunset org api返回我需要的所有数据 我遇到的问题是能够
  • Python 请求出现 SSL 错误

    尝试使用请求会话发出简单的获取请求 但我不断收到特定站点的 SSL 错误 我认为问题可能出在该网站 我使用https www ssllabs com https www ssllabs com 结果如下 但我不能确定 因为我在这方面没有知识