SSLError [SSL: WRONG_VERSION_NUMBER]

本文详细描述了如何通过StackOverflow解决在配置开发环境过程中遇到的SSL错误,重点在于指出使用HTTP而非HTTPS代理的正确设置方式。

公司开发环境配置时遇到问题:

Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1056)'))':

通过stackflow的方法搞定问题;

Use:

HTTPS_PROXY="http://username:password@proxy.example.com:8080"
https_proxy="http://username:password@proxy.example.com:8080"

Do not use:

HTTPS_PROXY="https://username:password@proxy.example.com:8080"
https_proxy="https://username:password@proxy.example.com:8080"
### 解决方案 `SSL: WRONG_VERSION_NUMBER` 是一种常见的 SSL/TLS 协议错误,通常发生在客户端和服务器之间的协议版本不兼容时。以下是可能的原因以及对应的解决方案: #### 原因分析 1. **协议版本不匹配** 客户端尝试使用特定的 TLS/SSL 版本连接到服务器,而服务器并不支持该版本[^2]。 2. **Python 的 OpenSSL 库版本较低** 如果使用的 Python 版本较旧,则其内置的 OpenSSL 可能无法支持现代加密标准或协议版本。 3. **目标服务未启用 HTTPS 或 SSL** 某些情况下,目标服务并未配置 SSL 支持,但客户端却强制通过 SSL 进行通信[^4]。 --- #### 解决方法 ##### 方法一:更新 Python 和 OpenSSL 确保正在运行的是最新的稳定版 Python,因为新版本会附带更现代化的安全库和支持更多协议版本的功能。例如,在某些场景下,升级至 Python 3.8 或更高版本能够解决问题。 ```bash # 使用包管理器安装最新版本的 Python sudo apt update && sudo apt install python3.9 ``` 或者手动下载并编译源码来获取最新版本。 --- ##### 方法二:指定正确的 SSL/TLS 版本 如果知道目标服务器所支持的具体 TLS 版本(如 TLSv1.2),可以在代码中显式设置它。下面是一个基于 `requests` 库的例子: ```python import requests from urllib3 import PoolManager import ssl class TlsAdapter(requests.adapters.HTTPAdapter): def init_poolmanager(self, *args, **kwargs): context = ssl.create_default_context() context.set_ciphers('DEFAULT@SECLEVEL=1') # 调整安全性级别以适应老版本TLS kwargs['ssl_version'] = ssl.PROTOCOL_TLSv1_2 # 显式指定TLS版本 self.poolmanager = PoolManager(*args, ssl_context=context, **kwargs) session = requests.session() adapter = TlsAdapter() session.mount("https://", adapter) response = session.get("https://example.com") # 替换为目标URL print(response.status_code) ``` 注意这里设置了 `ssl.PROTOCOL_TLSv1_2` 来适配具体需求[^2]。 --- ##### 方法三:禁用 SSL 验证(仅限开发环境) 虽然这种方法存在安全隐患,但它可以帮助快速定位问题所在。对于调试目的而言,可以暂时关闭 SSL 验证功能: ```python import requests try: response = requests.get("https://example.com", verify=False) # 不验证证书有效性 print(response.text[:100]) # 打印部分响应数据 except Exception as e: print(f"An error occurred: {e}") ``` 强烈建议不要在生产环境中采用这种方式,因为它会使应用程序暴露于中间人攻击的风险之下[^2]。 --- ##### 方法四:确认远程主机是否启用了 SSL 有时这个错误也可能源于试图向一个根本不提供 SSL 加密的服务发起安全连接请求。比如 Redis 默认监听非加密端口 6379;如果你尝试建立带有 SSL 参数的链接就会触发此类异常[^3]。因此有必要先核实对方站点的实际状况再做调整。 --- ### 总结 综上所述,“SSL: WRONG_VERSION_NUMBER”的根本原因在于双方未能就合适的传输层安全机制达成一致意见。针对不同情况采取相应措施即可有效缓解这一现象的发生概率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值