我正在运行Python代码,其中必须从HTTPSConnectionPool(host='ssd.jpl.nasa.gov',port=443)获取一些数据。但是每次我试图运行代码时,我都会得到以下错误。我在MAC操作系统12.1上
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='ssd.jpl.nasa.gov', port=443): Max retries exceeded with url: /api/horizons.api?format=text&EPHEM_TYPE=OBSERVER&QUANTITIES_[...]_ (Caused by SSLError(SSLError(1, '[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled (_ssl.c:997)')))
我真的不知道如何绕过这个问题..。谢谢你的帮助!
发布于 2022-05-25 08:48:48
当使用OpenSSL 3连接到不支持它的服务器时,会出现此错误。解决方案是降低python中的加密包的级别:
在使用过的环境中运行pip install cryptography==36.0.2
。
来源:https://github.com/scrapy/scrapy/issues/5491
编辑:参考Hally Mallon和阿姆卡拉的答案,在不降低密码学等级的情况下修复
发布于 2022-05-15 03:55:16
CVE-2009-3555.警告:当启用遗产不安全重新协商时,SSL连接将容易受到中描述的中间人前缀攻击的攻击。
借助https://bugs.launchpad.net/bugs/1963834和https://bugs.launchpad.net/ubuntu/+source/gnutls28/+bug/1856428
请注意,不建议编辑系统的openssl.conf,因为一旦openssl更新,您可能会丢失更改。
在任何目录中创建一个具有以下内容的自定义openssl.cnf
文件:
openssl_conf = openssl_init
[openssl_init]
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
Options = UnsafeLegacyRenegotiation
在运行程序之前,请确保在运行刮板时将OPENSSL_CONF
环境变量设置为自定义openssl.cnf
完整路径,如下所示:
OPENSSL_CONF=/path/to/custom/openssl.cnf python your_scraper.py
大概是这样的:
export OPENSSL_CONF=/path/to/custom/openssl.cnf
python your_scraper.py
或者,如果您正在使用pipenv、systemd或docker,请将其放入您的.env
文件中。
OPENSSL_CONF=/path/to/custom/openssl.cnf
发布于 2022-03-28 10:58:31
我在Linux上也遇到了同样的错误(当服务器不支持"RFC 5746安全重新协商“而客户端使用OpenSSL 3 (默认情况下强制执行该标准)时就会发生这种情况)。
这里有一个解决方案(您可能需要稍微调整一下)。
ssl
和urllib3
ssl
Context
的自定义Context
class CustomHttpAdapter (requests.adapters.HTTPAdapter):
'''Transport adapter" that allows us to use custom ssl_context.'''
def __init__(self, ssl_context=None, **kwargs):
self.ssl_context = ssl_context
super().__init__(**kwargs)
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = urllib3.poolmanager.PoolManager(
num_pools=connections, maxsize=maxsize,
block=block, ssl_context=self.ssl_context)
ssl
的OP_LEGACY_SERVER_CONNECT
上下文,并与您的自定义适配器一起使用。ssl.OP_LEGACY_SERVER_CONNECT
在Python中还不可用(https://bugs.python.org/issue44888)。但是,在OpenSSL中,它在位字段中的值是0x4。这样我们就可以做下面的事。
ctx = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
ctx.options |= 0x4
session.mount('https://', CustomHttpAdapter(ctx))
https://stackoverflow.com/questions/71603314
复制相似问题