Caused by SSLError(caused by sslerror ssleoferror)

Caused by SSLError追根溯源:
python在访问https请求时,在没有证书的情况下需要设置忽略证书,但有时候证书的忽略会引发其他异常,如:
req

追根溯源:

Python访问https请求时,必须配置为忽略丢失的证书,但忽略证书可能会导致其他异常,例如:

request.Exceptions.SSLError: HTTPSConnectionPool(host=\’127.0.0.1\’, port=443): url: /api/logins 上超出最大重试次数(SSLError(SSLError(1, \'[SSL: BAD_ECPOINT] bad ecpoint (_ssl .c:852) ) \’ ),))

虽然目前忽略了证书验证,但是密钥交换协议(ECDH曲线)已经成为一个难题,并且在服务器没有提供相应的密钥交换协议的情况下只能一一解决。

设置ECDH曲线

在请求库中设置ECDH曲线(例如X25519)可以通过自定义SSL上下文来实现。您可以使用urllib3 库创建自定义SSL 上下文并将其应用到请求会话。以下是有关如何设置ECDH 曲线的示例代码。

安装所需的库。

$ pip install pyOpenSSL urllib3 请求

使用以下代码设置ECDH曲线并发送请求。

导入SSL

导入URLlib3

导入请求

从urllib3 导入PoolManager

从urllib3.util.ssl_ 导入create_urllib3_context

类SSLAdapter(requests.adapters.HTTPAdapter):

def __init__(self, *args, **kwargs):

self.context=create_urllib3_context()

尝试:

self.context.set_ecdh_curve(\’X25519\’) # 尝试X25519 曲线

除了ssl.SSLError:

print(\’不支持X25519。恢复默认曲线\’)

super().__init__(*args, **kwargs)

def init_poolmanager(self, *args, **kwargs):

kwargs[\’ssl_context\’]=self.context

返回super().init_poolmanager(*args, **kwargs)

def proxy_manager_for(self, *args, **kwargs):

kwargs[\’ssl_context\’]=self.context

返回super().proxy_manager_for(*args, **kwargs)

会话=request.session()

session.mount(\’https://\’, SSLAdapter())

网址=\’https://127.0.0.1/api/logins\’

响应=session.get(url)

打印(响应.内容)

解释

SSLAdapter:用于设置SSL 上下文的自定义HTTPAdapter。 create_urllib3_context():创建基本的SSL 上下文。 self.context.set_ecdh_curve(\’X25519\’):将ECDH曲线设置为X25519。

注意事项

确保您使用的OpenSSL 版本支持X25519 曲线。

该方法适合自定义SSL设置,特别是在安全性要求较高的场景下。

如果X25519验证失败,您仍然可以尝试其他曲线prime256v1、secp384r1。

其他

您还可以通过设置忽略警报

urllib3.disable_warnings()

什么是ECDH曲线?

ECDH(椭圆曲线Diffie-Hellman)是一种基于椭圆曲线的密钥交换协议,用于通过不安全的通道安全地交换加密密钥。 ECDH 曲线是ECDH 协议的一部分,用于定义椭圆曲线数学运算。具体来说,ECDH曲线的特点包括:

密钥交换:ECDH 协议允许您生成共享密钥,而无需在两方之间共享密钥。该密钥可用于后续的对称加密,以保证通信的机密性。安全性:椭圆曲线密码学(ECC) 比基于整数分解或离散对数问题的传统加密方法(例如RSA 和DH)提供更高的安全性。对于相同的密钥长度,ECC 提供更高的安全性,因此可以使用较短的密钥来实现相同级别的安全性,从而减少通信开销和处理时间。性能:使用ECC(例如ECDH)的协议具有较短的密钥长度,使得它们在计算和传输方面更加高效,从而适合资源受限的环境,例如移动和物联网设备。

ECDH 曲线的常见类型

不同的ECDH曲线使用不同的椭圆曲线方程和参数。常见的ECDH 曲线包括:

P-256 (prime256v1):这是NIST 推荐的曲线,基于素数域上的256 位椭圆曲线。这是当今最常用的椭圆曲线之一。 P-384:这是另一条NIST 推荐的曲线,基于素数域上的384 位椭圆曲线,并提供比P-256 更高的安全性。 P-521:这是基于NIST 推荐的素数域的521 位椭圆曲线,提供最高的安全性。 X25519:这是由Daniel J. Bernstein 设计的现代曲线,基于255 位素数字段,提供高性能和安全性。与TLS 1.3 一样,它被广泛采用。

ECDH密钥交换的过程

双方生成密钥对。

每一方生成一个私钥和相应的公钥。私钥是一个随机数,公钥是私钥和椭圆曲线基点的乘积。 交换公钥。

双方交换公钥。各方使用对方的公钥和自己的私钥进行计算。 计算共享秘密。

双方使用对方的公钥和自己的私钥进行椭圆曲线点乘运算,计算出共享密钥。由于椭圆曲线的数学特性,双方计算出的密钥将是相同的。 使用共享密钥的对称加密:

共享密钥可用于对后续的通信数据进行加密和解密。

ECDH曲线的重要性

提高安全性:使用合适的ECDH曲线可以提供比传统密钥交换协议更高的安全性,特别是面对量子计算攻击。性能优化:选择合适的ECDH曲线可以在保证安全性的同时优化加解密操作的性能,尤其是在资源受限的设备上。互操作性:标准化ECDH 曲线(P-256、P-384、X25519 等)确保不同实现之间的互操作性,并允许不同系统和设备安全通信。

综上所述,ECDH曲线在加密通信中发挥着重要作用,通过提供高效、安全的密钥交换机制,保证数据传输的机密性和完整性。

以上#SSLError相关内容摘自互联网,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92699.html

(0)
CSDN的头像CSDN
上一篇 2024年6月28日
下一篇 2024年6月28日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注