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

在Debian上基于OpenSSL 3.0.8构建Python 3.9.2 FIPS版本失败

解决Python 3.9.2编译OpenSSL 3.0.8 FIPS版本时的SSL模块错误

问题根源

Python 3.9.2原生仅支持OpenSSL 1.0.2/1.1.x系列,对OpenSSL 3.x的API兼容性不足,导致编译时无法找到SSL_get1_peer_certificate、EVP_MD_get_type等符号,进而无法构建_ssl和_hashlib模块。


解决步骤

1. 给Python 3.9.2打OpenSSL 3.x兼容补丁

Python 3.9分支后期的官方提交(commit 8d2b4f0d)添加了OpenSSL 3的适配支持,你需要获取该补丁并应用到Python 3.9.2源码中:

  • 从CPython的代码仓库3.9分支找到对应提交的补丁文件
  • 进入Python 3.9.2源码目录,执行:
patch -p1 < 补丁文件名.patch

2. 配置编译环境变量

确保编译器能正确找到OpenSSL 3.0.8的头文件和库文件(替换/usr/local/ssl为你的实际安装路径):

export CPPFLAGS="-I/usr/local/ssl/include"
export LDFLAGS="-L/usr/local/ssl/lib64 -Wl,-rpath=/usr/local/ssl/lib64"
export LD_LIBRARY_PATH="/usr/local/ssl/lib64:$LD_LIBRARY_PATH"

3. 重新配置并编译Python

清理之前的编译残留,重新执行配置和编译:

# 清理旧编译文件
make clean

# 配置编译参数,明确指定OpenSSL路径
./configure --enable-optimizations --with-openssl=/usr/local/ssl

# 多线程编译
make -j$(nproc)

# 安装
make install

4. 验证修复结果

运行Python 3.9.2,检查SSL模块是否正常:

import ssl
print(ssl.OPENSSL_VERSION)
# 应输出:OpenSSL 3.0.8-fips [对应日期]

额外注意事项

  • 确保OpenSSL 3.0.8是正确编译并启用FIPS的:
    # 编译OpenSSL时需添加enable-fips参数
    cd openssl-3.0.8
    ./config enable-fips --prefix=/usr/local/ssl --openssldir=/usr/local/ssl
    make && make install && make install_fips
    ldconfig /usr/local/ssl/lib64
    
  • 若openssl version未显示fips标识,需重新配置FIPS模块:
    openssl fipsinstall -out /usr/local/ssl/fipsmodule.cnf -module /usr/local/ssl/lib64/ossl-modules/fips.so
    
  • 编辑/usr/local/ssl/openssl.cnf,在开头添加openssl_conf = openssl_init,并在文件末尾添加:
    [openssl_init]
    providers = provider_sect
    
    [provider_sect]
    fips = fips_sect
    base = base_sect
    
    [fips_sect]
    activate = 1
    module = /usr/local/ssl/lib64/ossl-modules/fips.so
    
    [base_sect]
    activate = 1
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:50:29