В настоящей статье описывается процесс настройки двухфакторной аутентификации по смарт-картам и USB-токенам JaCarta PKI на основе цифровых сертификатов X.509 в OpenVPN.
Данное решение позволяет отказаться от парольной аутентификации пользователя. Внедрение настоящего решения — это кардинальное снижение влияния человеческого фактора на безопасность системы.
OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT-firewall, без необходимости изменения их настроек.
JaCarta PKI — это линейка PKI-токенов производства компании «Аладдин Р.Д.» для строгой аутентификации пользователей в корпоративных системах, безопасного хранения ключевых контейнеров программных СКЗИ и цифровых сертификатов.
![](https://habrastorage.org/r/w1560/web/53f/707/d01/53f707d0163d42f0a9895cca12e72d2f.png)
Настоящая инструкция описывает процесс настройки простейшего сценария VPN-соединения между клиентом и сервером. Построение сложных сетей в данной инструкции не рассматривается.
ПО «Единый Клиент JaCarta» — программный комплекс, предназначенный для работы со всеми моделями токенов и смарт-карт JaCarta и eToken.
Для возможности аутентификации в OpenVPN по цифровому сертификату необходимо, чтобы клиент и сервер имели цифровые сертификаты, выданные доверенным центром сертификации. Клиент должен доверять сертификату сервера, а сервер – сертификату клиента.
Нарушение доверия к сертификату сервера или клиента приведет к невозможности установки VPN-соединения.
Рассмотрим процесс выпуска ключей и сертификатов с использованием средств, предлагаемых самим OpenVPN.
Перейдите в каталог easy-rsa, который находится в установочной директории OpenVPN и запустите init-config.bat. В результате работы создастся файл vars.bat, который необходимо отредактировать для адаптации к вашему окружению:
set HOME=%ProgramFiles%\OpenVPN\easy-rsa – задайте рабочий каталог
set KEY_CONFIG=openssl-1.0.0.cnf – задайте конфигурационный файл Openssl
set KEY_DIR=keys – задайте каталог для хранения ключей
set KEY_SIZE=1024 – установите размер ключа
set KEY_COUNTRY=US – укажите страну
set KEY_PROVINCE=CA – укажите область
set KEY_CITY=SanFrancisco – укажите город
set KEY_ORG=OpenVPN – укажите название организации
set KEY_EMAIL=mail@host.domain – укажите e-mail
set KEY_CN=changeme – укажите общее имя (common name)
set KEY_NAME=changeme – укажите имя
set KEY_OU=changeme – укажите подразделение организации
Следующие секции оставьте без изменений:
set PKCS11_MODULE_PATH=changeme – путь к модулю pkcs#11
set PKCS11_PIN=1234 – ПИН-код к смарт-карте
Необходимо сгенерировать ключи для TLS. Создайте пустые файлы для хранения индексов и серийных номеров. Для этого запустите (выполняется один раз):
Сгенерируйте ключ Удостоверяющего центра (выполняется один раз). Запустите:
В диалоге укажите имя желаемого Удостоверяющего центра.
Сгенерируйте файл для ключей Диффи-Хэллмана (только для сервера, выполняется один раз).
Запустите:
Сгенерируйте приватный ключ и сертификат сервера.
Запустите:
В результате будут сгенерированы ключ и сертификат с именем машины (сервера).
Теперь необходимо создать ключи и сертификаты для клиентских машин. Сгенерируйте файл PKCS#12 для каждой клиентской машины.
Для этого запустите:
В результате будет сгенерирован файл PKCS#12 с именем клиентской машины. Это нужно будет сгенерировать для каждой машины.
Отредактируйте ваш файл конфигурации сервера, задайте правильные сетевые настройки.
Обратите внимание на то, что необходимо правильно указать пути к файлам ключей и сертификатов. Выдержка из конфигурационного файла:
# Any X509 key management system can be used.
# OpenVPN can also use a PKCS #12 formatted key file
# (see «pkcs12» directive in man page).
ca C:\ПУТЬ_К_СЕРТИФИКАТУ_УДОСТОВЕРЯЮЩЕГО_ЦЕНТРА\ca.crt
cert C:\ПУТЬ_К_СЕРТИФИКАТУ_СЕРВЕРА\server.crt
key C:\ПУТЬ_К_КЛЮЧУ_СЕРВЕРА\server.key
# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh2048.pem 2048
dh C:\ПУТ_К_ФАЙЛУ_ДИФФИ-ХЭЛЛМАНА\dh1024.pem
Установите ПО «Единый Клиент JaCarta» и «JaCarta SecurLogon» с официального сайта компании «Аладдин Р.Д.».
«JaCarta SecurLogon» — программное решение, обеспечивающее простой и быстрый переход от обычных паролей к двухфакторной аутентификации при входе в ОС Microsoft Windows и доступе к сетевым ресурсам по токену JaCarta.
Выберете вкладку «PKI» и проинициализируйте токен.
Инициализация ключа приведет к удалению всех данных на нем. Если на ключе есть необходимая вам информация, в том числе ключи и сертификаты для других систем, не проводите инициализацию ключа.
С помощью ПК «Единый Клиент JaCarta» импортируйте на токен файл PKCS#12, ранее сгенерированный для клиента. На токене появятся ключи и сертификат, их можно увидеть в окне «Единый Клиент JaCarta». Установите сертификат с токена в личное хранилище компьютера.
Скопируйте sha1 отпечаток личного сертификата, он потребуется для дальнейшей настройки.
![](https://habrastorage.org/r/w1560/web/8d6/a8e/119/8d6a8e119cde4b3e8a23a84d875c6466.png)
Также потребуется сертификат Удостоверяющего центра, полученный в ходе настройки сервера. Установите сертификат в хранилище доверенных корневых центров сертификации, а также сохраните локально.
Отредактируйте ваш файл конфигурации клиента, задайте правильные сетевые настройки.
В поле cryptoapicert укажите отпечаток сертификата пользователя.
В поле ca укажите путь к сертификату Удостоверяющего центра.
Выдержка из конфигурационного файла:
# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
cryptoapicert «THUMB:81 0d d6 b7 …. ОТПЕЧАТОК КЛИЕНТСКОГО СЕРТИФИКАТА»
ca C:\ПУТЬ К СЕРТИФИКАТУ УДОСТОВЕРЯЮЩЕГО ЦЕНТРА\ca.crt
Запустите OpenVPN на сервере и клиенте.
Если настройка выполнена правильно, появится запрос на введение ПИН-кода к токену, и VPN-соединение успешно установится.
Наиболее популярным способом генерации ключей и выпуска сертификатов является использование Удостоверяющего центра, например, на базе Microsoft Certification Authority. Для настройки OpenVPN этот способ генерации ключей и выпуска сертификата также подойдет.
Для сервера сгенерируйте на Удостоверяющем центре ключи и сертификат проверки подлинности сервера, экспортируйте их в файл PKCS#12.
В настройках серверной части OpenVPN вместо cert и key необходимо указать pkcs12:
ca C:\ПУТЬ_К_СЕРТИФИКАТУ_УДОСТОВЕРЯЮЩЕГО_ЦЕНТРА\ca.crt
pkcs12 C:\ПУТЬ_К_СЕРТИФИКАТУ_СЕРВЕРА\server.p12
Корневым сертификатом ca должен быть сертификат Удостоверяющего центра.
Настройка шаблонов для выпуска ключей и сертификатов на токен описана в инструкции к «Единому Клиенту JaCarta» и «JaCarta SecurLogon». Для клиента сгенерируйте на Удостоверяющем центре ключи и сертификат проверки подлинности клиента. При этом импортировать на токен файл pkcs#12 не потребуется. Остальные настройки клиентской части выполняются аналогично.
Данное решение позволяет отказаться от парольной аутентификации пользователя. Внедрение настоящего решения — это кардинальное снижение влияния человеческого фактора на безопасность системы.
Об OpenVPN
OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT-firewall, без необходимости изменения их настроек.
О JaCarta PKI
JaCarta PKI — это линейка PKI-токенов производства компании «Аладдин Р.Д.» для строгой аутентификации пользователей в корпоративных системах, безопасного хранения ключевых контейнеров программных СКЗИ и цифровых сертификатов.
![](https://habrastorage.org/web/53f/707/d01/53f707d0163d42f0a9895cca12e72d2f.png)
Ход настройки
Описание демо-стенда
- Сервер — Microsoft Windows Server 2012, OpenVPN.
- Клиент — Microsoft Windows 8.1 с установленным драйвером «Единый Клиент JaCarta» версии 2.9 или выше, OpenVPN.
Настоящая инструкция описывает процесс настройки простейшего сценария VPN-соединения между клиентом и сервером. Построение сложных сетей в данной инструкции не рассматривается.
ПО «Единый Клиент JaCarta» — программный комплекс, предназначенный для работы со всеми моделями токенов и смарт-карт JaCarta и eToken.
Настройка сервера
Для возможности аутентификации в OpenVPN по цифровому сертификату необходимо, чтобы клиент и сервер имели цифровые сертификаты, выданные доверенным центром сертификации. Клиент должен доверять сертификату сервера, а сервер – сертификату клиента.
Нарушение доверия к сертификату сервера или клиента приведет к невозможности установки VPN-соединения.
Рассмотрим процесс выпуска ключей и сертификатов с использованием средств, предлагаемых самим OpenVPN.
Перейдите в каталог easy-rsa, который находится в установочной директории OpenVPN и запустите init-config.bat. В результате работы создастся файл vars.bat, который необходимо отредактировать для адаптации к вашему окружению:
set HOME=%ProgramFiles%\OpenVPN\easy-rsa – задайте рабочий каталог
set KEY_CONFIG=openssl-1.0.0.cnf – задайте конфигурационный файл Openssl
set KEY_DIR=keys – задайте каталог для хранения ключей
set KEY_SIZE=1024 – установите размер ключа
set KEY_COUNTRY=US – укажите страну
set KEY_PROVINCE=CA – укажите область
set KEY_CITY=SanFrancisco – укажите город
set KEY_ORG=OpenVPN – укажите название организации
set KEY_EMAIL=mail@host.domain – укажите e-mail
set KEY_CN=changeme – укажите общее имя (common name)
set KEY_NAME=changeme – укажите имя
set KEY_OU=changeme – укажите подразделение организации
Следующие секции оставьте без изменений:
set PKCS11_MODULE_PATH=changeme – путь к модулю pkcs#11
set PKCS11_PIN=1234 – ПИН-код к смарт-карте
Необходимо сгенерировать ключи для TLS. Создайте пустые файлы для хранения индексов и серийных номеров. Для этого запустите (выполняется один раз):
- vars.bat;
- clean-all.bat.
Сгенерируйте ключ Удостоверяющего центра (выполняется один раз). Запустите:
- vars.bat;
- build-ca.bat.
В диалоге укажите имя желаемого Удостоверяющего центра.
Сгенерируйте файл для ключей Диффи-Хэллмана (только для сервера, выполняется один раз).
Запустите:
- vars.bat;
- build-dh.bat.
Сгенерируйте приватный ключ и сертификат сервера.
Запустите:
- vars.bat;
- build-key-server.bat <имя машины>.
В результате будут сгенерированы ключ и сертификат с именем машины (сервера).
Теперь необходимо создать ключи и сертификаты для клиентских машин. Сгенерируйте файл PKCS#12 для каждой клиентской машины.
Для этого запустите:
- vars.bat;
- build-key-pkcs12.bat <имя машины>.
В результате будет сгенерирован файл PKCS#12 с именем клиентской машины. Это нужно будет сгенерировать для каждой машины.
Отредактируйте ваш файл конфигурации сервера, задайте правильные сетевые настройки.
Обратите внимание на то, что необходимо правильно указать пути к файлам ключей и сертификатов. Выдержка из конфигурационного файла:
# Any X509 key management system can be used.
# OpenVPN can also use a PKCS #12 formatted key file
# (see «pkcs12» directive in man page).
ca C:\ПУТЬ_К_СЕРТИФИКАТУ_УДОСТОВЕРЯЮЩЕГО_ЦЕНТРА\ca.crt
cert C:\ПУТЬ_К_СЕРТИФИКАТУ_СЕРВЕРА\server.crt
key C:\ПУТЬ_К_КЛЮЧУ_СЕРВЕРА\server.key
# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh2048.pem 2048
dh C:\ПУТ_К_ФАЙЛУ_ДИФФИ-ХЭЛЛМАНА\dh1024.pem
Настройка Клиента
Установите ПО «Единый Клиент JaCarta» и «JaCarta SecurLogon» с официального сайта компании «Аладдин Р.Д.».
«JaCarta SecurLogon» — программное решение, обеспечивающее простой и быстрый переход от обычных паролей к двухфакторной аутентификации при входе в ОС Microsoft Windows и доступе к сетевым ресурсам по токену JaCarta.
Выберете вкладку «PKI» и проинициализируйте токен.
Инициализация ключа приведет к удалению всех данных на нем. Если на ключе есть необходимая вам информация, в том числе ключи и сертификаты для других систем, не проводите инициализацию ключа.
С помощью ПК «Единый Клиент JaCarta» импортируйте на токен файл PKCS#12, ранее сгенерированный для клиента. На токене появятся ключи и сертификат, их можно увидеть в окне «Единый Клиент JaCarta». Установите сертификат с токена в личное хранилище компьютера.
Скопируйте sha1 отпечаток личного сертификата, он потребуется для дальнейшей настройки.
![](https://habrastorage.org/web/8d6/a8e/119/8d6a8e119cde4b3e8a23a84d875c6466.png)
Также потребуется сертификат Удостоверяющего центра, полученный в ходе настройки сервера. Установите сертификат в хранилище доверенных корневых центров сертификации, а также сохраните локально.
Отредактируйте ваш файл конфигурации клиента, задайте правильные сетевые настройки.
В поле cryptoapicert укажите отпечаток сертификата пользователя.
В поле ca укажите путь к сертификату Удостоверяющего центра.
Выдержка из конфигурационного файла:
# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
cryptoapicert «THUMB:81 0d d6 b7 …. ОТПЕЧАТОК КЛИЕНТСКОГО СЕРТИФИКАТА»
ca C:\ПУТЬ К СЕРТИФИКАТУ УДОСТОВЕРЯЮЩЕГО ЦЕНТРА\ca.crt
Проверка
Запустите OpenVPN на сервере и клиенте.
Если настройка выполнена правильно, появится запрос на введение ПИН-кода к токену, и VPN-соединение успешно установится.
Другие способы получения ключей и сертификатов
Наиболее популярным способом генерации ключей и выпуска сертификатов является использование Удостоверяющего центра, например, на базе Microsoft Certification Authority. Для настройки OpenVPN этот способ генерации ключей и выпуска сертификата также подойдет.
Для сервера сгенерируйте на Удостоверяющем центре ключи и сертификат проверки подлинности сервера, экспортируйте их в файл PKCS#12.
В настройках серверной части OpenVPN вместо cert и key необходимо указать pkcs12:
ca C:\ПУТЬ_К_СЕРТИФИКАТУ_УДОСТОВЕРЯЮЩЕГО_ЦЕНТРА\ca.crt
pkcs12 C:\ПУТЬ_К_СЕРТИФИКАТУ_СЕРВЕРА\server.p12
Корневым сертификатом ca должен быть сертификат Удостоверяющего центра.
Настройка шаблонов для выпуска ключей и сертификатов на токен описана в инструкции к «Единому Клиенту JaCarta» и «JaCarta SecurLogon». Для клиента сгенерируйте на Удостоверяющем центре ключи и сертификат проверки подлинности клиента. При этом импортировать на токен файл pkcs#12 не потребуется. Остальные настройки клиентской части выполняются аналогично.