You need to enable JavaScript to run this app. CentOS 7下Python3.6用pip安装库时出现SSL UNKNOWN_PROTOCOL错误
优惠活动
大模型
产品
解决方案
定价
更多

CentOS 7下Python3.6用pip安装库时出现SSL UNKNOWN_PROTOCOL错误

报错核心原因

这个报错和证书验证没有任何关系,所以你之前添加的一堆trusted-host参数从一开始就不对症。问题本质是CentOS 7自带的OpenSSL 1.0.2k的TLS协商逻辑,和你当前安装的pip 21.0.1版本的网络栈不兼容:pypi官方早已完全关闭TLS 1.0/1.1的连接通道,两者发起连接时无法就可用的TLS加密版本完成握手,最终直接抛出[SSL: UNKNOWN_PROTOCOL] unknown protocol错误。你提到旧版本pip可以正常下载资源,就是因为旧版pip的TLS协商兼容逻辑,还能适配老OpenSSL和新的pypi服务端完成握手。

解决步骤
  • 先卸载用户目录下不兼容的高版本pip
    你当前调用的pip 21.0.1是安装在用户个人目录下的,优先级比系统自带的pip高,是直接导致报错的源头。执行命令卸载:
    python3.6 -m pip uninstall pip -y
  • 安装系统适配的兼容版pip
    用yum安装和当前系统OpenSSL版本完全匹配的官方打包版pip,执行:
    yum install python36-pip
    这个版本的pip是CentOS官方针对系统环境验证过的,不存在老OpenSSL兼容问题。
  • 强制指定TLS版本,从根源规避握手失败
    CentOS 7的OpenSSL 1.0.2k本身是支持TLS 1.2协议的,只是默认协商时可能优先尝试已被服务端禁用的旧协议,才会触发报错。创建pip全局配置文件~/.pip/pip.conf,写入如下内容:
    [global]
    tls-version = tlsv1.2
    index-url = 你日常使用的稳定镜像源地址
    trusted-host = 对应镜像源的域名
    
  • 验证修复效果
    重启终端让环境变量生效后,执行安装命令测试:
    python3.6 -m pip install flask
    此时不会再出现SSL握手相关报错,可以正常完成包安装。

常见排障误区
  • 不需要反复升级openssl-devel:CentOS 7官方源提供的最高版本openssl-devel就是1.0.2k,没有更高的兼容版本,反复重装没有实际作用。
  • 不要依赖trusted-host解决这类报错:这个参数仅用于跳过证书合法性校验,无法解决TLS协议协商不匹配的核心问题,添加再多该参数也对当前报错无效。

内容的提问来源于stack exchange,提问作者mr odus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 18:45:05