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

Python FIPS模式下cryptography库MD5可用的配置调整需求

解决cryptography库在FIPS模式下仍可生成MD5的问题

核心原因

cryptography库默认可能会使用自身打包的OpenSSL(若通过pip安装二进制wheel包),而非系统中已启用FIPS的OpenSSL版本,从而绕过系统FIPS限制。此外,编译Python或cryptography时的配置选项可能未强制绑定FIPS规则。

Dockerfile调整步骤

1. 强制cryptography依赖系统FIPS-enabled OpenSSL编译

在安装cryptography前,添加环境变量指定系统OpenSSL路径,并强制源码编译(避免使用预编译wheel包):

ENV CRYPTOGRAPHY_OPENSSL_NO_LEGACY=1
ENV CRYPTOGRAPHY_SUPPRESS_LINK_FLAGS=1
ENV LDFLAGS="-L/usr/lib64/openssl-fips/lib"
ENV CFLAGS="-I/usr/include/openssl-fips"

安装时添加--no-binary :all:参数:

pip install cryptography --no-binary :all:

2. 设置运行时强制FIPS模式的环境变量

在Dockerfile中添加以下环境变量,确保Python和cryptography运行时严格遵循FIPS规则:

ENV OPENSSL_FIPS=1
ENV CRYPTOGRAPHY_FIPS_MODE=1

注:CRYPTOGRAPHY_FIPS_MODE是cryptography 3.4+版本支持的参数,会强制库仅使用FIPS合规的算法子集。

3. 添加编译后验证步骤

在Dockerfile末尾加入验证命令,确保cryptography绑定的是系统FIPS OpenSSL:

RUN python -c "import cryptography.hazmat.backends.openssl.backend as b; print(b.openssl_version_text()); print(b.fips_enabled())"

容器启动后,输出应显示OpenSSL版本已启用FIPS,且fips_enabled()返回True。

4. 优化Python编译配置(可选)

若Python编译时未完全绑定FIPS库,可在configure阶段添加链接参数:

./configure --prefix=/usr/local/python3.11 CFLAGS="-I/usr/include/openssl-fips" LDFLAGS="-L/usr/lib64/openssl-fips/lib -lcrypto"

验证生效的方法

运行以下代码测试MD5是否被禁止:

from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.backends import default_backend

try:
    digest = hashes.Hash(hashes.MD5(), backend=default_backend())
    digest.update(b"test")
    print(digest.finalize())
except Exception as e:
    print(f"MD5被禁止,符合FIPS规范: {e}")

若输出异常(如ValueError: MD5 is not allowed in FIPS mode),则配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:07:06