| 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 09.10.2017(UTC)
 Сообщений: 4
 
 | 
            
		      
                Добрый день. Пытаюсь собрать python версии 3.7 для работы по tls на алгоритмах из ГОСТа. Я находил вопросы по данной теме, но они касались питона версии 2.7 и код _ssl.py слегка изменился. Для облегчения задачи взял уже собранный OpenSSL с поддержкой гостовских шифров отсюда: Докер образ Далее клонирую исходники питона с оф. репозитория и выполняю Цитата:./configure --with-openssl=/usr/local/sslmake
 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 разПоблагодарили: 397 раз в 367 постах
 
 | 
            
		      
                По конкретному случаю наверно мало что подскажу, но в целом идея когда не помогает 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