OpenVPN — кроссплатформенное решение для организации виртуальных защищенных сетей.
Для допуска в виртуальную сеть, построенную на базе OpenVPN, клиент должен авторизоваться. В OpenVPN это можно сделать 3 способами:
Далее в статье описана настройка авторизации в OpenVPN с помощью ключевого носителя Рутокен ЭЦП. Рутокен ЭЦП защищен PIN-кодом от несанкционированного доступа и блокируется при исчерпании попыток ввода PIN-кода. В Рутокен ЭЦП аппаратно реализованы алгоритмы ГОСТ и RSA, поэтому проверка аутентификационных данных производится внутри токена. Закрытый ключ никогда не извлекается из носителя, что предотвращает его возможную утечку из оперативной памяти компьютера.
В статье показано, как развернуть тестовый VPN а также корпоративный УЦ на базе приложения XCA. С помощью УЦ будет создан ключ и сертификат сервера OpenVPN и произведена инициализация токена клиента. Затем настроим клиент OpenVPN таким образом, чтобы пользователь мог авторизоваться в OpenVPN с помощью Рутокен ЭЦП.
За основу взята статья http://habrahabr.ru/company/aktiv-company/blog/137306/
Стенд с сервером OpenVPN и XCA построен на Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.6 оперативное обновление 2
Для начала установим системные компоненты и утилиты, необходимые для работы Рутокен ЭЦП и XCA:
| sudo apt install libccid libpcsclite1 pcscd xca |
Для установки библиотеки librtpkcs11ecp.so следует перейти по указанной ссылке и скачать необходимую версию:
https://www.rutoken.ru/support/download/pkcs/
| sudo dpkg -i librtpkcs11ecp_1.8.2.0-1_amd64.deb |
Запустим XCA:
Меню "Пуск" → Утилиты → Цифровые сертификаты XCA
Файл→ Новая база данных (Ctrl+N) и сохраняем ее в удобном для Вас месте

Создадим ключ УЦ: Раздел "Закрытые ключи"→ "Новый ключ", назовем его CAkey, Keytype выбираем RSA, Keysize 2048 bit.

Создадим сертификат УЦ: раздел "Сертификаты" → "Новый сертификат" согласно нижеуказанным снимкам:



Создадим ключ сервера OpenVPN: раздел "Закрытые ключи" → "Новый ключ", назовем его Openvpnkey, Keytype - RSA, Keysize - 2048 bit.
Создадим сертификат сервера: раздел "Сертификаты"→ "Новый сертификат" согласно представленным снимкам:



Для работы с Рутокен ЭЦП, утилите XCA нужно указать библиотеку PKCS#11 АктивСофта.
Для этого указываем путь к ней: Файл → Опции → PKCS#11 provider → "Добавить" и указываем путь до библиотеки pkcs11(/opt/aktivco/rutokenecp/x86_64/librtpkcs11ecp.so)

XCA: графический инструмент для работы с сертификатами и ключевыми носителями |
Далее подключаем Рутокен ЭЦП и создаем ключ «на борту» Рутокен ЭЦП: раздел "Закрытые ключи" → "Новый ключ" → назовем его Clientkey, Keytype - RSA(!) на рутокене, Keysize - 2048 bit.
По запросу вводим PIN-код.
Создание сертификата клиента


Когда XCA предложит сохранить сертфикат на токен, нажимаем «Да» и вводим PIN-код.
Далее экспортируем сертификат УЦ в файл CA.crt, сертификат сервера в файл Openvpn.crt и ключ сервера в файл openvpn.pem (Закрытые ключи→ Экспорт, Сертификаты → Экспорт) и сохраним их к примеру в своей домашней директории.

Пакет openvpn входит в дистрибутивы ОС Astra Linux, и устанавливается по умолчанию.
Для быстрой настройки можно рекомендовать дополнительно установить пакеты
При установке пакетов fly-admin-openvpn-server и astra-openvpn-server автоматически будет установлен пакет libgost-astra, поддерживающий защитное преобразование информации в соответствии с алгоритмами ГОСТ.
Устанавливаем OpenVPN:
| sudo apt-get install fly-admin-openvpn-server |
Вы можете создать файл параметров Diffie Hellman (Диффи-Хелмана) с помощью openssl:
| openssl dhparam -out dh2048.pem 2048 |

Вы можете заменить 2048 на другие цифры, например на 4096. Если число выше, безопасность параметров будет выше, но вашему серверу или компьютеру потребуется больше времени для генерации двух простых чисел этой длины. Более низкие номера имеют более низкую безопасность, но требуют значительно меньшего времени для создания |
Создаем конфигурационный файл сервера OpenVPN:
| nano openvpn.conf |
Cо следующими параметрами:
port 1194 proto tcp dev tap ca /home/u/openvpn/CA.crt cert /home/u/openvpn/Openvpn.crt key /home/u/openvpn/Openvpnkey.pem dh /home/u/openvpn/dh2048.pem server 10.0.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 cipher BF-CBC comp-lzo persist-key persist-tun status openvpn-status.log verb 3 |
|
Запускаем сервер OpenVPN
| $ sudo openvpn --config /home/u/openvpn/openvpn.conf |

В "боевой" конфигурации сервер следует запускать как демон и ключи/сертификаты не должны лежать в /home |
На клиентской машине устанавливаем пакеты, необходимые для работы Рутокен ЭЦП:
| sudo apt install pcscd libpcsclite1 libccid |
и библиотеку librtpkcs11ecp.so
| sudo dpkg -i librtpkcs11ecp_1.8.2.0-1_amd64.deb |
Устанавливаем OpenVPN:
| sudo apt install openvpn |
Копируем с сервера сертификат Удостоверяющего Центра (УЦ) к примеру в раздел /home/client/openvpn/CA.crt
Создаем конфигурационный файл клиента
| nano openvpnclient.conf |
Cо следующими параметрами:
client dev tap proto tcp remote 192.168.xxx.xxx 1194 resolv-retry infinite nobind persist-key persist-tun ca /home/client/openvpn/CA.crt pkcs11-providers /usr/lib/librtpkcs11ecp.so pkcs11-id 'Aktiv\x20Co\x2E/Rutoken\x20ECP/2f996caf/Rutoken\x20ECP\x20\x3Cno\x20label\x3E/3C9F594E0994420E' pkcs11-pin-cache 300 comp-lzo verb 3 |
В параметре remote указываем ip-адрес VPN-сервера В параметре pkcs11-providers указываем путь к библиотеке PKCS#11 Рутокен. В параметре
|

Подключаемся к VPN-серверу:
| sudo openvpn --config /home/client/openvpnclient.conf |
По запросу следует ввести PIN-код к Рутокену ЭЦП.
