如何使用修改后的OpenSSL编译python(支持俄罗斯GOST)?

时间:2014-11-09 23:54:12

标签: python linux ssl openssl gost3410

我试图强制python 2.7与修改后的openssl库一起使用。我需要支持俄罗斯GOST密码。所以我像这样配置了OpenSSL

./config shared zlib enable-rfc3779 --prefix=/my/path/

并安装它(make depend,make,make test,make install)。 openssl.conf包含

openssl_conf = openssl_def
[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
default_algorithms = ALL

在该命令后/my/path/bin/openssl ciphers | tr ":" "\n" | grep GOST返回

GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89

openssl s_client -connect test.domain.ru:443成功连接,我可以发送GET请求(标准OpenSSL不能以这种方式使用此站点)。之后我尝试使用openssl lib编译python:我取消注释并将Modules / Setup.dist中的SSL变量更改为/my/path及其下的相关行,并更改了ssl_incsssl_libs变量在setup.py中。我已经将python安装到我的主文件夹并从该文件夹运行脚本。但是当我像那样运行脚本时

import urllib2
print(urllib2.urlopen('https://test.domain.ru/').read())

我仍然有错误

urllib2.URLError: <urlopen error [Errno 1] _ssl.c:501: error:140920F8:SSL routines:SSL3_GET_SERVER_HELLO:unknown cipher returned>

我应该怎么做才能强制python使用新的OpenSSL(gost引擎),可能有任何简单的方法可以做到这一点?

操作系统:Linux Mint 17 x64

1 个答案:

答案 0 :(得分:0)

尝试使用Modules / _ssl.c中的一些更改重建_ssl.pyd。 1)在行

之后添加#include
#include <openssl/x509.h>
#include <openssl/err.h>
#include <openssl/rand.h>

2)添加OPENSSL_config(NULL);行之前

SSL_library_init();
SSL_load_error_strings();

在init_ssl函数中。