You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python ssl模块无PROTOCOL_TLSv1_3属性问题咨询

问题解答

原因分析

  • Python 3.8的标准库ssl模块中,PROTOCOL_TLSv1_3常量虽在Python 3.7.3及以上版本已添加,但Ubuntu 20.04默认打包的Python 3.8可能因编译配置限制,未暴露该常量。
  • 你的OpenSSL 1.1.1f本身支持TLSv1.3(OpenSSL 1.1.1及以上原生支持),但Python的ssl模块是否提供该常量,完全取决于编译Python时的配置:若编译时链接的OpenSSL版本低于1.1.1,或未启用TLSv1.3相关编译选项,就会出现这个报错。
  • 可以运行以下代码验证当前Python环境的ssl模块支持的常量:
    import ssl
    print(dir(ssl))
    
    若输出中无PROTOCOL_TLSv1_3,则确认当前环境未暴露该属性。

解决办法

方法1:通过通用TLS上下文强制指定TLSv1.3

无需直接使用PROTOCOL_TLSv1_3,可创建通用TLS上下文后,通过版本限制强制仅使用TLSv1.3,该方式兼容Python 3.7+(含3.8):

import ssl

context = ssl.SSLContext(ssl.PROTOCOL_TLS)
# 限制仅使用TLSv1.3
context.min_version = ssl.TLSVersion.TLSv1_3
context.max_version = ssl.TLSVersion.TLSv1_3

方法2:重新编译Python 3.8

若必须使用PROTOCOL_TLSv1_3常量,可重新编译Python 3.8,确保编译时链接系统的OpenSSL 1.1.1f:

  1. 安装编译依赖:
    sudo apt-get install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl git
    
  2. 下载并解压Python 3.8源码:
    wget https://www.python.org/ftp/python/3.8.18/Python-3.8.18.tgz
    tar -xf Python-3.8.18.tgz
    cd Python-3.8.18
    
  3. 配置编译选项(指定系统OpenSSL路径):
    ./configure --prefix=/usr/local/python3.8 --with-openssl=/usr
    
  4. 编译并安装:
    make -j$(nproc)
    sudo make install
    
  5. 使用新编译的Python 3.8执行代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:01:18