Статус: Новичок
  Группы: Участники
 Зарегистрирован: 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 раз Поблагодарили: 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