Блог    Теги    RSS    Файлопомойка Мой Github

Блог №200 по адресу 0708:07C7 / ГОСТ шифр

17 мая 2016, 10:06
В данной статье решается задача создания защищённого соединения с сервером госзакупок с минимизацией необходимости дальнейшей поддержки решения.

1. Ставим OpenSSL версии >= 1.0.1 (с этой версии в основном дереве исходных кодов появилась поддержка ГОСТ), её заголовочные файлы, компилятор.

2. По умолчанию поддержка ГОСТ выключена. Для её включения в начало файла /etc/ssl/openssl.cnf перед первой секцией прописываем:
openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
gost = gost_section

[gost_section]
engine_id = gost
dynamic_path = /usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/libgost.so
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet


3. Многие программы (в т.ч. старые версии PHP) не читают конфиг OpenSSL, поэтому их нужно патчить. Т.к. поддерживать патченный PHP довольно накладно, то будем использовать stunnel.

4. stunnel версии 4.55 (последней на момент написания статьи) без патчей тоже не читает конфиг OpenSSL. Распаковываем исходники, патчим их, собираем всё это:
wget http://cryptocom.ru/opensource/stunnel-4.55-cp2.diff
mkdir -p /opt/stunnel-gost/src/
cd /opt/stunnel-gost/src/
tar xzvf ~/stunnel-4.55.tar.gz
patch -p1 <~/stunnel-4.55-cp2.diff
./configure --prefix=/opt/stunnel-gost/
make install


UPD: На момент публикации статьи файл с оригинальным патчем более недоступен по указанной ссылке. Посему выкладываю его здесь:
diff -Nur -X - stunnel-4.55/src/ssl.c stunnel-gost/src/ssl.c
--- stunnel-4.55/src/ssl.c 2012-08-10 01:44:18.000000000 +0400
+++ stunnel-gost/src/ssl.c 2015-08-19 16:01:41.000000000 +0300
@@ -59,6 +59,9 @@
}

int ssl_configure(GLOBAL_OPTIONS *global) { /* configure global SSL settings */
+ OPENSSL_config(NULL);
+ OpenSSL_add_all_algorithms();
+ SSLeay_add_ssl_algorithms();
#ifdef USE_FIPS
if(FIPS_mode()!=global->option.fips) {
RAND_set_rand_method(NULL); /* reset RAND methods */


5. Прописываем в /opt/stunnel-gost/etc/stunnel/stunnel.conf:
foreground = yes
debug = 6
setuid = proxy
setgid = proxy
pid = /tmp/stunnel.pid

socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1

verify = 3
cert = /opt/stunnel-gost/etc/stunnel/clientcert.pem
key = /opt/stunnel-gost/etc/stunnel/clientprivatekey.pem
CAfile = /opt/stunnel-gost/etc/stunnel/servercert.pem

[n1]
client = yes
accept = 1443
connect = int223.zakupki.gov.ru:443
ciphers = GOST2001-GOST89-GOST89
TIMEOUTclose = 0

[n2]
client = yes
accept = 1444
connect = intfz04.lanit.ru:443
ciphers = GOST2001-GOST89-GOST89
TIMEOUTclose = 0


6. Создаём init-файл для upstart (/etc/init/stunnel-gost.conf):
start on runlevel [2345]
stop on runlevel [016]
respawn
respawn limit 10 5
setuid root
setgid root
chdir /opt/stunnel-gost
exec /opt/stunnel-gost/bin/stunnel /opt/stunnel-gost/etc/stunnel/stunnel.conf


Готово. Все запросы на http://127.0.0.1:1443/ будут проксироваться на https://int223.zakupki.gov.ru:443/.
Теги: #nix  

Комментарии RSS

Ваше имя:

E-mail (будет скрыт):

Текст: