这个错误表明你的python程序在尝试通过https连接到minio服务器时,ssl握手失败了。根本原因是客户端和服务器在ssl/tls协议版本或端口使用上存在不匹配。
让我们来详细分析并解决这个问题:
错误原因分析
1.核心错误:openssl.ssl.error: [('ssl routines', 'ssl3_get_record', 'wrong version number')]
这通常表示客户端尝试用ssl/tls协议连接到一个实际上并未使用ssl/tls的端口,或者协议版本不匹配。
2.连接信息:你正在尝试连接到 119.84.128.79:39000
- 这是一个非标准的https端口(通常https使用443端口)
- minio默认使用9000端口(http)和9001端口(https)
3.可能的原因:
- minio服务器实际上在39000端口上运行的是http服务,但你的客户端尝试用https连接
- ssl/tls协议版本不兼容
- 防火墙或代理干扰了ssl握手
minio服务器配置问题
解决方案
方案1:检查minio服务器配置(最可能)
首先确认你的minio服务器实际配置:
检查minio是否启用了https:
# 登录到minio服务器,检查运行参数 ps aux | grep minio
查看是否包含--address ":39000"和--ssl相关参数
尝试用curl测试连接:
# 测试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客户端初始化代码:
from 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:检查网络和代理设置
确认没有代理干扰:
import os # 确保没有设置不正确的代理 os.environ['no_proxy'] = '119.84.128.79'
尝试禁用ssl验证(仅测试用):
from 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:更新相关库
pip install --upgrade minio urllib3 pyopenssl
方案4:检查minio服务器ssl证书
如果minio确实配置了https,但使用自签名证书:
获取服务器证书:
openssl s_client -connect 119.84.128.79:39000 -showcerts </dev/null 2>/dev/null | openssl x509 -outform pem > minio.crt
在客户端代码中指定证书:
import 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服务器配置的信息,我可以给出更具体的建议。
到此这篇关于python连接minio报错‘ssl routines‘,‘ssl3_get_record‘,‘wrong version number‘的解决方法的文章就介绍到这了,更多相关python连接minio报错解决内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论