这个错误表明你的Python程序在尝试通过HTTPS连接到MinIO服务器时,SSL握手失败了。根本原因是客户端和服务器在SSL/TLS协议版本或端口使用上存在不匹配。
让我们来详细分析并解决这个问题:
错误原因分析
-
核心错误 :
OpenSSL.SSL.Error: [('SSL routines', 'ssl3_get_record', 'wrong version number')]- 这通常表示客户端尝试用SSL/TLS协议连接到一个实际上并未使用SSL/TLS的端口,或者协议版本不匹配。
-
连接信息 :你正在尝试连接到
119.84.128.79:39000- 这是一个非标准的HTTPS端口(通常HTTPS使用443端口)
- MinIO默认使用9000端口(HTTP)和9001端口(HTTPS)
-
可能的原因:
- MinIO服务器实际上在39000端口上运行的是HTTP服务,但你的客户端尝试用HTTPS连接
- SSL/TLS协议版本不兼容
- 防火墙或代理干扰了SSL握手
- MinIO服务器配置问题
解决方案
方案1:检查MinIO服务器配置(最可能)
首先确认你的MinIO服务器实际配置:
-
检查MinIO是否启用了HTTPS:
bash# 登录到MinIO服务器,检查运行参数 ps aux | grep minio查看是否包含
--address ":39000"和--ssl相关参数 -
尝试用curl测试连接:
bash# 测试HTTP连接 curl -v http://119.84.128.79:39000 # 测试HTTPS连接 curl -v https://119.84.128.79:39000 # 如果服务器使用自签名证书 curl -v -k https://119.84.128.79:39000 -
根据测试结果调整客户端代码:
-
如果39000端口是HTTP,修改MinIO客户端初始化代码:
pythonfrom minio import Minio # 改为使用http而不是https minio_client = Minio( '119.84.128.79:39000', access_key='your-access-key', secret_key='your-secret-key', secure=False # 禁用SSL )
-
方案2:检查网络和代理设置
-
确认没有代理干扰:
pythonimport os # 确保没有设置不正确的代理 os.environ['NO_PROXY'] = '119.84.128.79' -
尝试禁用SSL验证(仅测试用):
pythonfrom minio import Minio from urllib3 import disable_warnings from urllib3.exceptions import InsecureRequestWarning disable_warnings(InsecureRequestWarning) minio_client = Minio( '119.84.128.79:39000', access_key='your-access-key', secret_key='your-secret-key', secure=True # 保持为True,但我们将禁用验证 ) # 强制禁用SSL验证(不推荐生产环境使用) import ssl minio_client._http.ssl_context = ssl._create_unverified_context()
方案3:更新相关库
bash
pip install --upgrade minio urllib3 pyOpenSSL
方案4:检查MinIO服务器SSL证书
如果MinIO确实配置了HTTPS,但使用自签名证书:
-
获取服务器证书:
bashopenssl s_client -connect 119.84.128.79:39000 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > minio.crt -
在客户端代码中指定证书:
pythonimport ssl from minio import Minio # 创建自定义SSL上下文 ssl_context = ssl.create_default_context(cafile='path/to/minio.crt') minio_client = Minio( '119.84.128.79:39000', access_key='your-access-key', secret_key='your-secret-key', secure=True, ssl=ssl_context )
推荐排查步骤
- 首先确认MinIO服务器实际配置 - 这是最可能的问题所在
- 使用curl测试连接 - 确定端口实际使用的协议
- 根据测试结果调整客户端配置 - 修改secure参数或SSL设置
- 检查网络连通性 - 确保没有防火墙或代理干扰
根据你的错误信息,最可能的情况是MinIO服务器在39000端口上运行的是HTTP服务,但你的客户端尝试用HTTPS连接。请首先尝试方案1中的修改,将secure=False添加到MinIO客户端初始化中。
如果问题仍然存在,请提供更多关于你的MinIO服务器配置的信息,我可以给出更具体的建议。