python连接minio报错:‘SSL routines‘, ‘ssl3_get_record‘, ‘wrong version number‘

这个错误表明你的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服务器实际配置:

  1. 检查MinIO是否启用了HTTPS:

    bash 复制代码
    # 登录到MinIO服务器,检查运行参数
    ps aux | grep minio

    查看是否包含--address ":39000"和--ssl相关参数

  2. 尝试用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
  3. 根据测试结果调整客户端代码:

    • 如果39000端口是HTTP,修改MinIO客户端初始化代码:

      python 复制代码
      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:检查网络和代理设置
  1. 确认没有代理干扰:

    python 复制代码
    import os
    # 确保没有设置不正确的代理
    os.environ['NO_PROXY'] = '119.84.128.79'
  2. 尝试禁用SSL验证(仅测试用):

    python 复制代码
    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:更新相关库
bash 复制代码
pip install --upgrade minio urllib3 pyOpenSSL
方案4:检查MinIO服务器SSL证书

如果MinIO确实配置了HTTPS,但使用自签名证书:

  1. 获取服务器证书:

    bash 复制代码
    openssl s_client -connect 119.84.128.79:39000 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM > minio.crt
  2. 在客户端代码中指定证书:

    python 复制代码
    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
    )

推荐排查步骤

  1. 首先确认MinIO服务器实际配置 - 这是最可能的问题所在
  2. 使用curl测试连接 - 确定端口实际使用的协议
  3. 根据测试结果调整客户端配置 - 修改secure参数或SSL设置
  4. 检查网络连通性 - 确保没有防火墙或代理干扰

根据你的错误信息,最可能的情况是MinIO服务器在39000端口上运行的是HTTP服务,但你的客户端尝试用HTTPS连接。请首先尝试方案1中的修改,将secure=False添加到MinIO客户端初始化中。

如果问题仍然存在,请提供更多关于你的MinIO服务器配置的信息,我可以给出更具体的建议。

相关推荐
张张123y5 小时前
后端第一课:输入 URL 后发生了什么?我用手写 Socket 把全链路跑通了
python·websocket·ai·socket·url·后端开发
白帽攻防录7 小时前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
十年Java程序媛7 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
全栈弄潮儿7 小时前
Python实战第7期:字典与集合
后端·python·编程语言
2603_965148117 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
xixiaoyunya8 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
把我格子衫拿来8 小时前
Dice 很高就够了吗?分割评价中的 IoU、表面距离与 HD95
python·图像分割·模型评估·医学影像·dice
学逆向的8 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
曲径海盗8 小时前
【Python 学习第 31 天】复习:变量与数据类型 等 3 题
python·学习笔记·编程入门
Data_Journal9 小时前
如何绕过 Cloudflare:网页抓取的最佳方法
网络·python