Криптопро csp linux stunnel
Клиент Stunnel (Linux) принимает трафик на указанном порте 1500 по адресу 192.168.69.180, шифрует все поступившие на него данные и передает их на Stunnel Сервер (Windows) с IP адресом 192.168.69.61 на порт 1502. Сервер расшифровывает все поступившие на этот порт данные и передает на указанный в настройках порт и адрес (google.ru, порт 80).
Если требуется проверка сертификата клиента, нужно назначить параметр «Verify=2».
Установка на ОС Linux
Для работы необходимо установить КриптоПро CSP 3.6 — http://www.cryptopro.ru/products/csp/downloads
- lsb-cprocsp-base
- sb-cprocsp-rdr
- lsb-cprocsp-capilite
- lsb-cprocsp-kc1 ( или lsb-cprocsp-kc2)
Дополнительный пакет (входит в состав дистрибутива):
Установка пакета Stunnel
Для дистрибутивов Linux, основанных на rpm, это утилита rpm:
- rpm -i cprocsp-stunnel-3.6.1-4.i486.rpm
Для дистрибутивов, основанных на deb, это утилита alien:
- alien -kci cprocsp-stunnel-3.6.1-4.i486.rpm
После установки пакета бинарные файлы, предназначенные для запуска 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
Источник
Экономим бюджет компании, или как построить криптотуннель по ГОСТу с минимальными затратами
Обеспечение безопасности при помощи средств криптографической защиты информации (СКЗИ) — не очень сложная задача, если все технологические участки находятся на хост-машине. Однако для того чтобы передавать и шифровать информацию одновременно, необходимо построить грамотный технологический процесс программного обеспечения. Мы расскажем, как это сделать.
Введение
Для любого системного администратора или DevOps построить VPN или «пробросить» нестандартный метод инкапсуляции пакетов (туннелирование) — не очень сложная задача. Часто для этого применяют OpenVPN, если планируется постоянное использование, либо SSH-туннелирование, если защищённое соединение нужно на один-два раза. Однако есть предприятия и ведомства, которые должны соблюдать строгие условия передачи данных, установленные законодательством. Под такие требования подпадают, например, многие структуры, которые так или иначе имеют отношение к денежным операциям: банки, микрофинансовые организации и т.п. Персональные данные тоже являются «защищаемой информацией» во всех законах и положениях.
В результате оказывается, что при шифровании необходимо использовать СКЗИ со всеми необходимыми сертификатами и лицензиями, соответствующие нормативным требованиям. Одним из примеров таких программных средств является «КриптоПро CSP». В данной статье мы будем разбирать задачу о том, как «прокинуть» средствами stunnel сетевой туннель, который будет шифроваться «КриптоПро CSP», заодно получив хоть и тестовый (на 3 месяца), но полностью валидный сертификат по ГОСТ Р 34.10-2012.
Задача
Для начала необходимо разобраться в том, как всё описанное будет работать, и поставить конкретные задачи.
К примеру, есть две машины. Для демонстрации настройки двух операционных систем одна из них будет работать под управлением ОС семейства Linux (Ubuntu, версия не важна, но желательно — не ниже 16), вторая — под Windows 10. На win-системе будет запускаться Netcat на прослушивание какого-то определённого порта, а с nix-системы будут передаваться пакеты. Таким образом, Windows-машина будет сервером (в том числе — в отношении настроек stunnel).
Что должно получиться в итоге? При подключении с Linux к Windows через программу Netcat все пакеты будут шифроваться сертификатом GOST_2012 и сертифицированным программным обеспечением. Задача тривиальна и ставится для того, чтобы показать возможность такого манёвра. Поскольку stunnel передаёт любой протокол внутри себя, можно, к примеру, подписывать XML-файлы секретной подписью другой организации или передавать персональные данные в хранилище через интернет.
Тестовый стенд
Linux
Начнём с того, что система готова к настройке. Как работает «КриптоПро CSP», читатели, скорее всего, уже знают. Небольшое уточнение относительно stunnel: эта программа изначально создавалась как прокси-сервер с функцией шифрования трафика. Другими словами, она берёт, к примеру, HTTP и превращает его в своего рода HTTPS (если не вдаваться в подробности протоколирования).
Работает stunnel следующим образом: при запуске на локальной машине открывается определённый порт, указанный в конфигурационном файле, и в тот же момент приложение соединяется со своей копией на другой машине. Таким образом все пакеты, попавшие на порт localhost, шифруются, затем проксируются на другую систему и там расшифровываются. Удобство схемы состоит в том, что это — просто шлюз, которому неважно, какой протокол шифровать и передавать.
Рисунок 1. Схема работы stunnel
Изначально загружаем необходимый продукт «КриптоПро» отсюда. В скачанном архиве будет примерно такой набор файлов, как на скриншоте.
Рисунок 2. «КриптоПро CSP» на Linux
Для установки необходимо запустить install.sh. Этот скрипт добавит нужные компоненты: certmgr, cpverify, cryptcp, csptest, csptestf, curl, der2xer, genkpim, inittst, wipefile. У каждой из этих программ — своя зона ответственности, свои ключи и задачи. Для нашего сценария нужны будут только certmgr и cryptcp.
Бинарные файлы попадают в /opt/cprocsp/bin/, а не в /bin, поэтому запустить их просто командой не удастся. Необходимо либо выполнить запуск напрямую оттуда, либо сделать символьные ссылки. Не стоит только создавать ссылку с помощью curl, так как работает он «криво»: не видит список удостоверяющих центров из операционной системы и, как следствие, завершает любой запрос с ошибкой, из-за чего приходится использовать ключ -k, который отменяет проверку сертификата на валидность.
Сама по себе stunnel шифрует трафик с помощью OpenSSL, но в компании «КриптоПро» её переписали под свои нужды, так что теперь она использует утилиты для un- и de- шифрования и называется stunnel-msspi. Поставляется она в архиве вместе с CSP; также её можно скачать отдельно. Для старых версий «КриптоПро CSP» есть вероятность, что программа уже установлена, но это необходимо проверить.
Как было сказано выше, для stunnel Linux-система будет клиентом, а Windows — сервером. IP-адреса: Linux – 172.22.1.65, Windows – 172.22.1.121.
Следующий шаг — ключи и сертификаты. Для сервера нам необходимо и то, и другое, причём все это — в контейнере «КриптоПро». Для клиента требуется только сертификат, нужный для того, чтобы к туннелю не мог подключиться любой желающий. Забегая немного вперёд, отметим, что в конфигурационном файле stunnel есть опция verify, и вот её параметры:
0. Не проверять сертификат сервера
1. Проверять сертификат при его наличии
2. Проверять сертификат всегда
3. Проверять наличие данного сертификата в хранилище TrustedUsers
Начиная с параметра 1, собственно, и нужен сертификат клиента для защиты подключения.
Итак, чтобы сгенерировать контейнер для сервера, необходимо воспользоваться утилитой cryptcp:
cryptcp -creatcert -provtype 81 -dn «C=RU, L=Rostov-na-Donu, CN=srv, 1.2.643.100.5=305867501589415» -exprt -ex -cont «\\\\.\\HDIMAGE\\srv» -ku -certusage «1.3.6.1.5.5.7.3.1» -hashAlg «1.2.643.7.1.1.2.3» -ca http://www.cryptopro.ru/certsrv
Интересные моменты относительно ключей:
- provtype — указывает тип криптопровайдера. По умолчанию подставляется 75. Значение этих цифр можно узнать так: в каталоге /opt/cprocsp/sbin/amd64 лежит программа cpconfig, нужно запустить её с ключами -defprov -view_type.
Рисунок 3. Вывод программы cpconfig
На скриншоте выше видно, что значение 75 устарело и соответствует ГОСТу версии 2001. ГОСТ версии 2012 на 256 и 512 бит задаётся значениями 80 и 81 соответственно.
- certusage — идентификатор назначения. Для выполнения задачи необходимы два модуля: проверка подлинности клиента (1.3.6.1.5.5.7.3.2) и проверка подлинности сервера (1.3.6.1.5.5.7.3.1).
- hashAlg — алгоритм, который будет применяться при шифровании. Список вариантов можно найти здесь.
- ca — центр сертификации, который подпишет всё содержимое, чтобы оно было валидным. Важно, что сертификаты и ключи будут действовать только в течение 3 месяцев (точнее, данный конкретный УЦ, который указан в команде, выдаёт их именно на этот срок).
- cont — контейнер, который будет создан; в нём сохранятся файлы. Если контейнер с таким именем уже есть, то, естественно, команда не отработает. Проверить можно командой certmgr -list; в её выводе отобразится исчерпывающая информация о контейнерах системы и пользователя.
Выше описаны самые «пикантные» моменты, которые могут отнять много времени. Остальные ключи и другие пояснения можно найти в документации.
Переходим к генерации сертификата для клиента. Команда аналогична, меняется только имя контейнера и идентификатор назначения сертификата.
cryptcp -creatcert -provtype 81 -dn «C=RU, L=Rostov-na-Donu, CN=srv, 1.2.643.100.5=305867501589415» -exprt -ex -cont «\\\\.\\HDIMAGE\\srv» -ku -certusage «1.3.6.1.5.5.7.3.2» -hashAlg «1.2.643.7.1.1.2.3» -ca http://www.cryptopro.ru/certsrv
Теперь с ключами и сертификатами всё готово. На всякий случай приведём команду экспорта из контейнера:
certmgr -export -provtype 81 -dest /куда экспортировать сертификат/имя сертификата -cont «\\\\.\\HDIMAGE\\имя контейнера»
Таким образом можно получить «на руки» сертификат в формате DER.
Далее нужно приниматься за настройку stunnel, а именно — его конфигурационного файла. Создаём в удобном месте файл stunnel.conf. Содержимое будет следующим:
Прокомментируем содержание секции TestStunnel:
- Client — указатель на то, является ли программа сервером или клиентом;
- Accept — локальный порт, к которому будет подключаться программа;
- Connect — IP-адрес и порт сервера, с которым мы будем соединяться;
- Verify — параметр, который мы уже описывали выше;
- Cert — клиентский сертификат. На этом пункте необходимо задержаться.
Можно указать параметр двумя способами: либо импортировать сертификат из контейнера и прописать путь к файлу, либо воспользоваться отпечатком сертификата. Извлечь отпечаток можно всё той же командой certmgr -list. Идентификатор указан как SHA1 Hash.
Рисунок 4. Отпечаток в Linux
На этом настройка Linux закончена, можно запускать stunnel с указанием соответствующего файла конфигурации stunnel.conf.
Windows
После установки «КриптоПро CSP» необходимо скопировать контейнер с серверным ключом и сертификатом с nix-машины.
Все контейнеры попадают в /var/opt/cprocsp/keys/username и состоят из 6 файлов с расширением .key. Копируем все, хотя здесь будет небольшая проблема с импортом. «КриптоПро CSP» считает, что хранить контейнер на жёстком диске небезопасно, и поэтому необходим токен. Указанное препятствие можно обойти создав эмулятор контейнера.
Для этого необходимо скачать и установить ImDisk. Затем при помощи ImDisk Virtual Disk Driver следует создать эмулятор токена (именно так его и увидит CSP, по-русски это — просто контейнер HDD) и подключить его к системе.
Рисунок 5. Псевдотокен
В итоге рядом с жёстким диском должен появиться ещё один носитель — это и есть токен. Туда понадобится скопировать папку с контейнером. После этих манипуляций сертификат нормально установится в «КриптоПро CSP».
Дополнительно стоит скопировать клиентский сертификат на сервер и тоже его установить.
Конфигурационный файл для stunnel-msspi:
Здесь всё устроено по аналогии с конфигурационным файлом клиента: accept — порт, к которому подключается клиентская копия stunnel (должен быть разблокирован в брандмауэре и «проброшен» во все места до наружного выхода), connect — порт для приложения (в данном случае — Netcat).
Повторяется история и в отношении сертификата: либо импорт из контейнера, что совсем не рекомендуется, либо указание отпечатка. Отпечаток можно найти в составе сертификата.
Рисунок 6. Отпечаток сертификата в Windows
Журнал для отладки можно будет отключить тогда, когда всё будет настроено как часы.
Теперь пора скачать Netcat для Windows.
Следующий шаг — запустить сервер stunnel, заодно перезапустив и клиент. Для отладки и тестирования в Windows лучше делать это из командной строки.
В командной строке сервера побежит протокол, который расскажет, что кто-то успешно подключился. Пишем в одном окне набор символов; он появляется в другом окне. Всё настроено верно.
Рисунок 7. Результат
Выводы
В статье мы разобрали задачу о том, как получить криптотуннель с валидным ключом, подписанным самим «КриптоПро», и с алгоритмом шифрования GOST_2012, 512 бит. Сделано это с минимальными затратами — две лицензии на «КриптоПро CSP».
Можно, конечно, написать что-то своё, но лицензии JСP, к примеру, стоят намного больше. Готовые решения тоже будут значительно дороже.
Источник