追根溯源:
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