下地醋歹炮 發表於 2026-1-13 14:51:54

python连接minio报错‘SSL routines‘,‘ssl3_get_record‘,‘wrong version number‘的解决方法

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">错误原因分析</a></li><li><a href="#_label1">解决方案</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">方案1:检查MinIO服务器配置(最可能)</a></li><li><a href="#_lab2_1_1">方案2:检查网络和代理设置</a></li><li><a href="#_lab2_1_2">方案3:更新相关库</a></li><li><a href="#_lab2_1_3">方案4:检查MinIO服务器SSL证书</a></li></ul><li><a href="#_label2">推荐排查步骤</a></li><ul class="second_class_ul"></ul></ul></div><p>这个错误表明你的Python程序在尝试通过HTTPS连接到MinIO服务器时,SSL握手失败了。根本原因是客户端和服务器在SSL/TLS协议版本或端口使用上存在不匹配。</p>
<p>让我们来详细分析并解决这个问题:</p>
<p class="maodian"><a name="_label0"></a></p><h2>错误原因分析</h2>
<p>1.核心错误:<code>OpenSSL.SSL.Error: [(&#39;SSL routines&#39;, &#39;ssl3_get_record&#39;, &#39;wrong version number&#39;)]</code></p>
<p>这通常表示客户端尝试用SSL/TLS协议连接到一个实际上并未使用SSL/TLS的端口,或者协议版本不匹配。</p>
<p>2.连接信息:你正在尝试连接到 119.84.128.79:39000</p>
<ul><li>这是一个非标准的HTTPS端口(通常HTTPS使用443端口)</li><li>MinIO默认使用9000端口(HTTP)和9001端口(HTTPS)</li></ul>
<p>3.可能的原因:</p>
<ul><li>MinIO服务器实际上在39000端口上运行的是HTTP服务,但你的客户端尝试用HTTPS连接</li><li>SSL/TLS协议版本不兼容</li><li>防火墙或代理干扰了SSL握手</li></ul>
<p>MinIO服务器配置问题</p>
<p class="maodian"><a name="_label1"></a></p><h2>解决方案</h2>
<p class="maodian"><a name="_lab2_1_0"></a></p><h3>方案1:检查MinIO服务器配置(最可能)</h3>
<p>首先确认你的MinIO服务器实际配置:</p>
<p>检查MinIO是否启用了HTTPS:</p>
<div class="jb51code"><pre class="brush:bash;"># 登录到MinIO服务器,检查运行参数
ps aux | grep minio
</pre></div>
<p>查看是否包含--address &quot;:39000&quot;和--ssl相关参数</p>
<p>尝试用curl测试连接:</p>
<div class="jb51code"><pre class="brush: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
</pre></div>
<p>根据测试结果调整客户端代码:</p>
<p>如果39000端口是HTTP,修改MinIO客户端初始化代码:</p>
<div class="jb51code"><pre class="brush:py;">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
)
</pre></div>
<p class="maodian"><a name="_lab2_1_1"></a></p><h3>方案2:检查网络和代理设置</h3>
<p>确认没有代理干扰:</p>
<div class="jb51code"><pre class="brush:py;">import os
# 确保没有设置不正确的代理
os.environ['NO_PROXY'] = '119.84.128.79'
</pre></div>
<p>尝试禁用SSL验证(仅测试用):</p>
<div class="jb51code"><pre class="brush:py;">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()</pre></div>
<p class="maodian"><a name="_lab2_1_2"></a></p><h3>方案3:更新相关库</h3>
<div class="jb51code"><pre class="brush:bash;">pip install --upgrade minio urllib3 pyOpenSSL
</pre></div>
<p class="maodian"><a name="_lab2_1_3"></a></p><h3>方案4:检查MinIO服务器SSL证书</h3>
<p>如果MinIO确实配置了HTTPS,但使用自签名证书:</p>
<p>获取服务器证书:</p>
<div class="jb51code"><pre class="brush:bash;">openssl s_client -connect 119.84.128.79:39000 -showcerts &lt;/dev/null 2&gt;/dev/null | openssl x509 -outform PEM &gt; minio.crt
</pre></div>
<p>在客户端代码中指定证书:</p>
<div class="jb51code"><pre class="brush:py;">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
)</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>推荐排查步骤</h2>
<ul><li>首先确认MinIO服务器实际配置 - 这是最可能的问题所在</li><li>使用curl测试连接 - 确定端口实际使用的协议</li><li>根据测试结果调整客户端配置 - 修改secure参数或SSL设置</li><li>检查网络连通性 - 确保没有防火墙或代理干扰</li></ul>
<p>根据你的错误信息,最可能的情况是MinIO服务器在39000端口上运行的是HTTP服务,但你的客户端尝试用HTTPS连接。请首先尝试方案1中的修改,将secure=False添加到MinIO客户端初始化中。</p>
<p>如果问题仍然存在,请提供更多关于你的MinIO服务器配置的信息,我可以给出更具体的建议。</p>
頁: [1]
查看完整版本: python连接minio报错‘SSL routines‘,‘ssl3_get_record‘,‘wrong version number‘的解决方法