OpenSSL FIPS_mode_set не работает в библиотеке шифрования PythonPython

Программы на Python
Ответить
Anonymous
 OpenSSL FIPS_mode_set не работает в библиотеке шифрования Python

Сообщение Anonymous »

Согласно документации библиотеки криптографии Python [1], можно создать собственное колесо криптографии со статически связанным OpenSSL. Я попытался сделать это с помощью установки OpenSSL, созданной с использованием объектного модуля FIPS, и смог успешно собрать колесо, но обнаружил, что оно не имеет функций FIPS (невозможно установить FIPS_mode_set=1).

Я создал Dockerfile, который может воспроизвести тот же результат. Код Python в конце должен показывать «1» и «OpenSSL 1.0.2t-fips 10 сентября 2019 года», а вместо этого показывать «0» и «OpenSSL 1.0.2t 10 сентября 2019 года» (без -fips обозначение).

Меня поражает то, что когда я вызываю созданную мной версию Openssl 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/insta ... tic-wheels

РЕДАКТИРОВАТЬ: Добавив -DOPENSSL_FIPS в сборку шифрования, я смог сделать выходные данные OPENSSL_VERSION_TEXT равными OpenSSL 1.0.2t-fips 10 сен. 20, но вывод FIPS_mode_set(1) по-прежнему равен 0.

РЕДАКТИРОВАТЬ 2: Использование ERR_get_error() показывает следующее:

Код: Выделить всё

>>> print backend._lib.FIPS_mode_set(1)
0
>>> print backend._lib.ERR_get_error()
755413103
Когда я вставляю это в openssl errstr, я получаю:

Код: Выделить всё

openssl errstr 755413103
error:755413103:lib(85):func(1043):reason(259)
По некоторым данным поиска в Google это означает, что отпечаток пальца не совпадает (FIPS_R_FINGERPRINT_DOES_NOT_MATCH). Хотя не знаю, куда идти дальше.

Подробнее здесь: https://stackoverflow.com/questions/582 ... hy-library
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»