根据 Python Cryptography library 的文档 [1],可以使用静态链接的 OpenSSL 构建自定义密码轮。我尝试使用使用 FIPS 对象模块构建的 OpenSSL 安装来执行此操作,并且能够成功构建轮子,但发现它没有 FIPS 功能(无法设置 FIPS_mode_set=1)。
我创建了一个可以重现相同结果的 Dockerfile。最后的 Python 代码应该显示“1”和“OpenSSL 1.0.2t-fips 10 Sep 2019”,而是显示“0”和“OpenSSL 1.0.2t 2019 年 9 月 10 日”(未-fips指定)。
令我难以置信的是,当我调用openssl version我构建的 CLI 时,它正确显示了带有-fips后缀的版本。因为,我猜我在构建密码学的某个地方出错了。
在这里感谢任何帮助!
FROM centos
# Install build dependencies
RUN yum groupinstall -y "Development Tools" && \
yum install -y python-devel libffi-devel
# Install Python dependencies
RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
python get-pip.py && \
pip install virtualenv setuptools wheel pip
# Build Fips object module
RUN curl -O https://www.openssl.org/source/openssl-fips-2.0.16.tar.gz && \
tar xvf openssl-fips-2.0.16.tar.gz && \
cd openssl-fips-2.0.16 && \
./config && \
make && \
make install
# Build OpenSSL
RUN curl -O https://www.openssl.org/source/openssl-1.0.2t.tar.gz && \
tar xvf openssl-1.0.2t.tar.gz && \
cd /openssl-1.0.2t && \
./config fips no-shared -fPIC --prefix=/openssl-1.0.2t/openssl && \
make depend && \
make && \
make install_sw
# Build cryptography
RUN CFLAGS="-I/openssl-1.0.2t/openssl/include" LDFLAGS="-L/openssl-1.0.2t/openssl/lib" pip wheel --no-cache --no-binary :all: cryptography && \
pip install cryptography*.whl
# Test if fips is enabled
RUN python -c "\
from cryptography.hazmat.backends.openssl.backend import backend;\
print backend._lib.FIPS_mode_set(1);\
print ''.join([backend._lib.OPENSSL_VERSION_TEXT[i] for i in range(30)])"
[1] https://cryptography.io/en/latest/installation/#static-wheels
牛魔王的故事
相关分类