• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

SSLError: dh key to small(Python requests)

武飞扬头像
Bertramoon
帮助1

在使用爬虫库requests爬取页面时发生了"dh key to small"的错误,如下几种情况:

requests.exceptions.SSLError: [SSL: SSL_NEGATIVE_LENGTH] dh key too small (_ssl.c:600)
requests.exceptions.SSLError: HTTPSConnectionPool(host='abc.def.edu.cn', port=443): Max retries exceeded with url: ... (Caused by SSLError(SSLError(1, '[SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:997)')))
requests.exceptions.SSLError: HTTPSConnectionPool(host='myhost.com', port=443): Max retries exceeded with url: myurl (Caused by SSLError(SSLError(1, '[SSL: WRONG_SIGNATURE_TYPE] wrong signature type (_ssl.c:1108)')))

简单分析了一下原因,最新版本的SSL默认不使用弱DH(DH:即Diffie-Hellman,密钥交换协议/算法),因此会报错。

解决思路也比较简单,主要两种:

  1. 设置或添加默认值
  2. 回退版本

第2种方法适合一些虚拟机、docker之类的,比如把ubuntu20.04改成ubuntu18.04。而在我们自己的主机环境下时,推荐在Python脚本中添加代码修改

  • 解决方案1:添加默认密码字符串
import requests

requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS  = ':HIGH:!DH:!aNULL'

...
  • 解决方案2:降低SECLEVEL级别
import requests

requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'DEFAULT:@SECLEVEL=1'

...

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhabbhj
系列文章
更多 icon
同类精品
更多 icon
继续加载