Как заставить работать python c модифицированной OpenSSL (с поддержкой ГОСТ)?
В итоге, путем проб и ошибок получилось такое решение (оговорюсь, что решение можно сказать "на коленке", если кто-то предложит варианты, чтобы сделать его стабильным, то я буду за).
1. В конфиге openssl.cnf:
- в самом начале добавляем openssl_conf = openssl_def
- в конце добавляем[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
default_algorithms = ALL
Проверяем, что все работает, командами:openssl ciphers |tr ":" "\n" |grep GOST
openssl engine gost -t
openssl engine
2. Далее качаем исходники Python для сборки (проверено на версиях 2.7.8 и 2.7.9) и распаковываем, например:wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
3. В исходниках открываем файлик Modules/_ssl.c и делаем следующее:
- ищем инклуды:#include <openssl/x509.h>
#include <openssl/err.h>
#include <openssl/rand.h>
после них добавляем#include <openssl/conf.h>
- ищем функцию init_ssl. В ней перед строчкамиSSL_library_init();
SSL_load_error_strings();
вставляем OPENSSL_config(NULL);
4. Собираем Python и проверяем работу с ГОСТ.
Спасибо за ваше решение. Дополню его примером использования для доступа к сайтам
    import ssl
    import urllib2
    ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
    ctx.set_ciphers('GOST2001-GOST89-GOST89:GOST94-GOST89-GOST89')
    print urllib2.urlopen("https://test.domain.ru/", context=ctx).read()
Без объявления контекста urllib2 у меня не заработал