Статус: Новичок
Группы: Участники
Зарегистрирован: 09.10.2017(UTC) Сообщений: 4
|
Добрый день. Пытаюсь собрать python версии 3.7 для работы по tls на алгоритмах из ГОСТа. Я находил вопросы по данной теме, но они касались питона версии 2.7 и код _ssl.py слегка изменился. Для облегчения задачи взял уже собранный OpenSSL с поддержкой гостовских шифров отсюда: Докер образДалее клонирую исходники питона с оф. репозитория и выполняю Цитата:./configure --with-openssl=/usr/local/ssl make make install
Питон собирается, однако нужные шифры не добавляются. Как я проверял: Цитата:python3 -c "import ssl; ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1); ctx.set_ciphers('GOST2012-GOST8912-GOST8912')" Шифр по идее должен подключиться без ошибок. В /usr/local/ssl/openssl.cnf уже из коробки прописано подключение GOST engine, я также пробовал редактировать _ssl.c согласно этого вопроса. Как я говорил, 3 версия отличается и я менял код (действовал по наитию) с Цитата:/* Load all algorithms and initialize cpuid */ OPENSSL_add_all_algorithms_noconf(); /* Init OpenSSL */ SSL_load_error_strings(); SSL_library_init(); На Цитата:OPENSSL_config(NULL); /* Load all algorithms and initialize cpuid */ OPENSSL_add_all_algorithms_conf(); /* Init OpenSSL */ SSL_load_error_strings(); SL_library_init(); (ну и #include "openssl/conf.h" в начале, после #include "openssl/rand.h") Указание пути в OPENSSL_config не помогло. Ему даже можно указать неправильный путь и ошибок не будет. Что я делаю не так? От того же автора есть docker образ c php и мне не удалось провести параллели для сборки python. В самом противном случае придется для взаимодействия использовать собранный здесь же curl с ГОСТ.
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 393 раз в 366 постах
|
По конкретному случаю наверно мало что подскажу, но в целом идея когда не помогает openssl_conf - попробуйте получить информацию о пути, по которому openssl ищет конфиг и движки. Это может быть совершенно не та папка /usr/local/ssl/ В случае чисто openssl команда выглядит так Например, у меня openssl 1.1.0 собранный под windows и он автоматически грузит движок из определенной папки C:\Program Files (x86)\OpenSSL\lib\engines-1_1, прописанной при сборке. Фактически openssl лежит совсем в другой папке. Если указать этот же движок в конфиге указанном в переменной окружения или командной строке, возникает конфликт, поэтому мне в итоге пришлось выкинуть подгрузку движка из конфига и создать по тому пути символическую ссылку на папку, в которой движок. Еще возможен вариант, что там движок не от КриптоПро (это можно увидеть по выводу openssl engine). Отредактировано пользователем 9 октября 2019 г. 5:59:56(UTC)
| Причина: Не указана
|
1 пользователь поблагодарил two_oceans за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 09.10.2017(UTC) Сообщений: 4
|
Спустя некоторое количество проб и ошибок, проблема решилась так: В Modules/_ssl.c существует такой участок кода: Цитата:#ifndef OPENSSL_VERSION_1_1 /* Load all algorithms and initialize cpuid */ OPENSSL_add_all_algorithms_noconf(); /* Init OpenSSL */ SSL_load_error_strings(); SSL_library_init(); #endif Все найденные мной ответы, что касались объединения OpenSSL с гостом и Python, работали для версии Python=2.7 И на 2.7 версии не существовало части Цитата:#ifndef OPENSSL_VERSION_1_1 В настоящее же время, при попытке собрать OpenSSL 1.1.0g (и то не самая свежая версия) и Python 3.7 указанный код выше не выполнялся вовсе (так как для OpenSSL 1.1+ объявлялась OPENSSL_VERSION_1_1). Мое решение: Добавить строку Цитата:OPENSSL_add_all_algorithms_conf(); куда-нибудь вне этого ifndef блока. Я добавил сразу над ним: Цитата: OPENSSL_add_all_algorithms_conf(); #ifndef OPENSSL_VERSION_1_1 /* Load all algorithms and initialize cpuid */ OPENSSL_add_all_algorithms_noconf(); /* Init OpenSSL */ SSL_load_error_strings(); SSL_library_init(); #endif
Таким образом, будет прочитан openssl.cnf и добавлены гостовские шифры.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.11.2019(UTC) Сообщений: 2
|
Добрый день! Пытаюсь также собрать Python поддерживающий шифрование по госту. На данный момент есть redhat с OPENSSL 1.1.0g с поддержкой госта. Также пересобрал CURL, и CURL может шифровать https по госту. PYTHON пересобрать так и не получилось пока, пробую версию 3.6.8 OPENSSL_VERSION выдает корректную, но работать по госту отказывается. Можете более подробную инструкцию выложить, как собрать python с гостом?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 09.10.2017(UTC) Сообщений: 4
|
Предложенный мной вариант практически костыль, должен быть более правильный способ. Вот докерфайл, где мне удалось собрать: https://pastebin.com/wtzpFjQEНапомню, что если задача стоит взаимодействия по https с гостом, то библиотеке requests нужно принудительно указывать поддержку госта.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.11.2019(UTC) Сообщений: 2
|
--- Напомню, что если задача стоит взаимодействия по https с гостом, то библиотеке requests нужно принудительно указывать поддержку госта. Как? ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1); ctx.set_ciphers('GOST2012-GOST8912-GOST8912')" ???
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 09.10.2017(UTC) Сообщений: 4
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close