Настройка stunnel криптопро linux

Prianichnikov`s blog

Всем доброго дня.
Недавно ко мне обратился знакомый с вопросом по реализации шифрованного по алгоритму ГОСТ TLS-канала для работы с веб-сервисами некоторых БКИ.
Немного помыслив, вспомнил, что есть такая замечательная штука как stunnel, которая может TLS как в режиме сервера, так и в режиме клиента. Плюс к этому компания КриптоПро сделала форк stunnel с оптимизацией под российские криптоалгоритмы. В итоге родился небольшой гайд по реализации простого и бюджетного варианта, которым и хочу поделиться с вами.

В качестве примера приводится настройка stunnel в качестве TLS клиента:
1) к серверу НБКИ без авторизации пользователя;
2) к тестовому УЦ КриптоПро с авторизацией пользователя по сертификату.
В данном материале использовались OC Debian 8.3 x86 и КриптоПро CSP 4.0.9708 (Nechaev) от 01.03.2016 (stunnel включен).

1. Установка Крипто-Про CSP и stunnel

tar zxvf linux-ia32_deb.tgz cd linux-ia32_deb
sudo apt-get install lsb-core sudo dpkg -i lsb-cprocsp-base_4.0.0-4_all.deb sudo dpkg -i lsb-cprocsp-rdr_4.0.0-4_i386.deb sudo dpkg -i lsb-cprocsp-capilite_4.0.0-4_i386.deb sudo dpkg -i lsb-cprocsp-kc1_4.0.0-4_i386.deb sudo dpkg -i cprocsp-stunnel_4.0.0-4_i386.deb

2. Импорт корневых сертификатов

Импортируем корневые сертификаты КриптоПро в локальное хранилище сертификатов.
Нам понадобятся два сертификата:
— корневой сертификат УЦ Крипто-Про. Данным сертификатом подписан сертификат веб-сервера НБКИ;
— корневой сертификат тестового УЦ КриптоПро. Данным сертификатом подписан сертификат веб-сервера тестового УЦ КриптоПро и тестовый сертификат нашего пользователя.

/opt/cprocsp/bin/ia32/certmgr -inst -file /cert/ca_cryptopro_4aad6f_der.cer -store ROOT /opt/cprocsp/bin/ia32/certmgr -inst -file /cert/ca_test_cryptopro_4487da_der.cer -store ROOT
/opt/cprocsp/bin/ia32/certmgr -list -store ROOT

3. Копирование ключевого контейнера пользователя

Наверное, это самая запутанная и самая важная часть данного руководства.
Сначала немного теории «на пальцах».
В протоколе TLS предусмотрена односторонняя и двусторонняя аутентификация. Под односторонней чаще всего понимается аутентификация веб-сервера, когда сервер доказывает клиенту что действительно владеет закрытым ключом предъявленного цифрового сертификата. Под двусторонней аутентификацией сервер и клиент доказывают это друг другу.
В КриптоПро ключевая информация (ключи шифрования) хранятся в контейнере (с точки зрения файловой системы — это каталог с несколькими файлами). В качестве носителя может выступать (чаще всего) дискета, флешка, токен, ветка реестра (Windows) или каталог (Linux). И если клиент или сервер проходят взаимную аутентификацию (доказывают владение ключами), то они должны иметь не только цифровой сертификат с открытым ключом, но и сам контейнер с ключами.
Опустим процесс создания тестового ключа в тестовом УЦ КриптоПро и начем с того момента, что у нас есть ключевой контейнер с именем «test» на флешке.
Монтируем флешку

sudo mount /dev/sdb1 /media/sdb1/

Копируем контейнер с флешки на HDD
Есть два способа: ручной и с помощью утилиты. Я скопировал вручную

cp -r /media/sdb1/test.000/ /var/opt/cprocsp/keys/stunnel/
certmgr -list -cont '\\.\HDIMAGE\test'
csptest -keyset -check -cont '\\.\HDIMAGE\test'
certmgr -export -dest test_user_7a8110.cer -cont '\\.\HDIMAGE\test'
certmgr -inst -file test_user_7a8110.cer -cont '\\.\HDIMAGE\test'
PrivateKey Link : Yes Container : HDIMAGE\\test.000\2EF8

4. Создание файла конфигурации Stunnel

sudo mkdir /etc/stunnel sudo vim /etc/stunnel/stunnel.conf
setgid = stunnel setuid = stunnel pid=/var/opt/cprocsp/tmp/stunnel_cli.pid output=/var/opt/cprocsp/tmp/stunnel_cli.log socket = l:TCP_NODELAY=1 socket = r:TCP_NODELAY=1 debug = 3 client = yes [stunnel.nbki] accept = :8181 connect = icrs.nbki.ru:443 verify=2 [stunnel.test_uc] accept = :8282 connect = www.cryptopro.ru:5555 client = /etc/stunnel/test_user_7a8110.cer verify=2
/opt/cprocsp/sbin/amd64/stunnel_thread /etc/stunnel/stunnel.conf

5. Автоматический запуск Stunnel

Когда все заработало должным образом, то было бы неплохо автоматизировать запуск stunnel при загрузке ОС.
Создаем скрипт запуска. Также будут доступны команды управления start, stop, restart.
Пример команды для перезагрузки stunnel:

sudo service stunnel_thread restart
sudo vim /etc/init.d/stunnel_thread
#!/bin/sh ### BEGIN INIT INFO # Provides: stunnel # Default-Start: 3 5 # Default-Stop: 0 1 6 # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Short-Description: Start daemon at boot time # Description: Enable stunnel by daemon. ### END INIT INFO PATH_DAEMON=/opt/cprocsp/sbin/ia32 DAEMON=stunnel_thread CONFIG=/etc/stunnel/stunnel.conf test -x $PATH_DAEMON/$DAEMON || exit 0 case "$1" in start) $PATH_DAEMON/$DAEMON $CONFIG ;; stop) pkill -f $DAEMON ;; restart) pkill -f $DAEMON sleep 3 $PATH_DAEMON/$DAEMON $CONFIG ;; *) echo "Usage: $0 " exit 1 ;; esac exit 0
sudo update-rc.d stunnel_thread defaults

6. Troubleshooting

Частые ошибки, с которыми я столкнулся и можете столкнуться вы.
1) Не открывается сайт через stunnel
Что нужно сделать:
— проверить адрес и порт в конфиге
— в браузере открывать не только сам адрес stunnel, а полный путь.
Пример: не 10.0.0.123:8181, а 10.0.0.123:8181/se/login
2) Следующие ошибки в логе

Error 0x40 ((unknown)) returned by CertVerifyCertificateChainPolicy!
Error 0x40 when validate certificate

Ошибка возникает из-за того, что stunnel не может проверить сертификат по списку отзыва CRL. Проблему можно решить тремя вариантами (но с разной эффективностью):
— периодически вручную импортировать актуальный CRL с помощью certmgr;
— отключить проверку сертификатов в TLS в файле настроек CSP

"libcurl.so" = "/usr/lib/i386-linux-gnu/libcurl.so.4"

7. Ссылки

Тестовый Удостоверяющий Центр КриптоПро
КриптоПро CSP
КриптоПро Stunnel
Официальные мануалы по КриптоПро Stunnel

Ключевые слова для поисковых систем: настройка БКИ, автоматизированый обмен с бюро кредитных историй, автоматическое получение отчетов с бюро кредитных историй, КриптоПро и БКИ, обмен с бюро кредитных историй, шифрование трафика криптопро, криптопро на linux

Источник

Настройка stunnel криптопро linux

Ниже показан пример шифрования трафика между экземпляром Stunnel (режим «клиента») на ОС Linux и экземпляром Stunnel (режим «сервера») на ОС Windows. В режиме «клиента» Stunnel принимает трафик от клиентского приложения, зашифровывает его и отправляет на сервер. На сервере трафик расшифровывается и передаётся конечному приложению или другой службе на этом сервере.

Клиент Stunnel (Linux) принимает трафик на указанном порте 1500 по адресу 192.168.69.180, шифрует все поступившие на него данные и передает их на Stunnel Сервер (Windows) с IP адресом 192.168.69.61 на порт 1502. Сервер расшифровывает все поступившие на этот порт данные и передает на указанный в настройках порт и адрес (google.ru, порт 80).

Если требуется проверка сертификата клиента, нужно назначить параметр «Verify=2».

Установка на ОС Linux

  • lsb-cprocsp-base
  • sb-cprocsp-rdr
  • lsb-cprocsp-capilite
  • lsb-cprocsp-kc1 ( или lsb-cprocsp-kc2)

Дополнительный пакет (входит в состав дистрибутива):

Установка пакета Stunnel

Для дистрибутивов Linux, основанных на rpm, это утилита rpm:

Для дистрибутивов, основанных на deb, это утилита dpkg:

После установки пакета бинарные файлы, предназначенные для запуска Stunnel, будут помещёны в /opt/cprocsp/sbin//. Существует две реализации службы Stunnel: с использованием библиотеки thread и с использованием fork; бинарные файлы называются stunnel_thread и stunnel_fork соответственно. Stunnel с использованием fork возможно использовать только с КриптоПро CSP исполнение КС2.

Установка сертификата

Устанавливаем сертификат клиента в хранилище «Личные» локального компьютера с привязкой к контейнеру закрытого ключа. В сертификате требуется наличие OID — «Проверки подлинности клиента».

/opt/cprocsp/bin//certmgr -inst -file client.cer -cont ‘\\.\HDIMAGE\client’

Требуется установить необходимые сертификаты:

а) сертификат корневого Центра Сертификации (ЦС) – в хранилище «Доверенные корневые Центры Сертификации» локального компьютера

/opt/cprocsp/bin//certmgr -inst -file root.cer -store ROOT

б) если сертификат клиента выдан на подчинённом ЦС — сертификаты всех подчиненных ЦС в цепочке должны быть установлены в хранилище «Промежуточные Центры Сертификации» локального компьютера

/opt/cprocsp/bin//certmgr -inst -file ca.cer -store CA

Запуск службы

Запуск службы будет выполняться под тем пользователем, под которым был установлен сертификат.

root@ubuntu:/opt/cprocsp/sbin/ia32# ./stunnel_thread /etc/stunnel/stunnel.conf

Установка на ОС Windows

Для работы необходимо установить:

Установка службы Stunnel

Установка делается путём запуска stunnel.exe – install

В дальнейшем служба для старта будет использовать файл stunnel.exe из той папки, откуда была проведена установка.

Перед установкой нужно выбрать режим работы службы, установить сертификаты и сформировать файл конфигурации.

Установка сертификата

Устанавливаем сертификат сервера в хранилище «Личные» локального компьютера с привязкой к контейнеру закрытого ключа. Для TLS-сервера требуется, чтобы в сертификате сервера был OID — «проверка подлинности сервера». Имя сертификата (Common Name) должно совпадать с именем компьютера.

Требуется установить необходимые сертификаты:

а) сертификат корневого Центра Сертификации (ЦС) – в хранилище «Доверенные корневые Центры Сертификации» локального компьютера;

б) если сертификат сервера выдан на подчинённом ЦС — сертификаты всех подчиненных ЦС в цепочке должны быть установлены в хранилище «Промежуточные Центры Сертификации» локального компьютера.

Запуск службы по умолчанию выполняется от пользователя «SYSTEM»

Пуск -> Панель управления -> Администрирование -> Службы -> Stunnel Service -> Пуск (Запустить).

В браузере Internet Explorer обращаемся по адресу — 192.168.69.180:1500, открывается адрес — google.ru:80

Получается следующая цепочка:

данные_в_открытом_виде ->192.168.69.180:1500 ->шифрование ->
данные_в_зашифрованном_виде ->192.168.69.61:1502 ->дешифровка ->
данные_в_открытом_виде ->google.ru:80

Данная программа позволяет создавать TLS-«туннель», обеспечивающий шифрование трафика от клиента до сервера с использованием сертифицированного СКЗИ произвольного TCP-соединения.

Подробные настройки по использованию Stunnel

Источник

Читайте также:  Линукс статический ip адрес
Оцените статью
Adblock
detector