25.12.2017

Настройка VPN (PPTP) в Ubuntu 17.10 с авторизацией по смарт-карте JaCarta

Интернет-портал Habrahabr.ru, декабрь, 2017<br>
Статья Ильдара Садыкова, ведущего системного администратора компании "Аладдин Р.Д."

В операционных системах семейства Windows настроить доступ по VPN c использованием смарт-карт – достаточное простое и тривиальное дело. Хотя, господа из MS явно сломали эту возможность в ОС Windows 10 версия 1709 сборка 16299.15.

При попытке подключиться к VPN серверу по протоколу pptp с использованием смарт-карты, ОС Windows просто закрывает данное окно без каких-либо ошибок, даже не спрашивая пароль от смарт-карты.

"Надо было ставить Linux!!!", скажут многие, и, может быть, будут правы.

В статье мы рассмотрим, как настроить подключение к удалённому серверу по VPN с использованием авторизации по смарт-карте JaCarta.

В качестве операционной системы была выбрана ОС Ubuntu 17.04 x64 Desktop. К сожалению, быстрым способом завести на Debian 9 у меня не получилось, но это повод написать следующую статью под Debian.

$ uname –a
Linux VPN-PPTP 4.13.0-16-generic #19-Ubuntu SMP Wed Oct 11 18:35:14 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

1. Далее ставим необходимые нам пакеты

$ sudo apt update
$ sudo apt install opensc libpcsclite1 pcsc-tools pcscd libengine-pkcs11-openssl ppp pptp-linux

*pptp version 1.9.0

Помимо пакетов из стандартного репозитория нам необходимы драйвера и библиотеки для нашей смарт-карты.

Скачиваем

$ mkdir ~/tmp
$ cd ~/tmp
$ wget https://www.aladdin-rd.ru/support/downloads/279f1310-d83d-4858-ba13-ecdbe0d37530/get

Распаковываем архив

$ unzip get
$ cd JaCarta_PKI_Linux/IDProtect\ Client\ 6.37.03/DEB/
$ ls

idprotectclient_637.03-0_amd64.deb
idprotectclient_637.03-0_i386.deb
idprotectclientlib_637.03-0_amd64.deb

Устанавливаем необходимые драйверы и библиотеки.

Для 64bit систем:

$ sudo dpkg -i idprotectclient_637.03-0_amd64.deb
$ sudo dpkg –i idprotectclientlib_637.03-0_amd64.deb

Для 32bit систем:

$ sudo dpkg -i idprotectclient_637.03-0_i386.deb

2. Предварительные операции завершены. Теперь сама настройка VPN.

2.1. Для начала нам необходимо проверить, увидела ли система нашу смарт-карту. Вставляем карточку JaСarta в USB-порт компьютера и выполняем команду

$ pkcs11-tool --module /lib64/libASEP11.so -L

После чего должно появиться примерно следующее:

[TEXT]
Available slots:
Slot 0 (0x0): Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00
token label : ISadykov
token manufacturer : Aladdin R.D.
token model : JaCarta Laser
token flags : login required, rng, token initialized, PIN initialized
hardware version : 1.0
firmware version : 1.0
serial num : 4E46001220483933
pin min/max : 4/16

2.2. Для создания конфигурационного файла нам будут необходимы идентификаторы ключа и сертификата с токена. Для этого вводим команду

$ pkcs11-tool --module /lib64/libASEP11.so -l –O

после ввода пин-кода, надо будет запомнить значения из полей ID:

Using slot 0 with a present token (0x0)
Logging in to "ISadykov".
Please enter User PIN:
Certificate Object; type = X.509 cert
label: le-AladdinJacartaUser-1e321881-0e-59035
ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Private Key Object; RSA
label: le-AladdinJacartaUser-1e321881-0e-59035
ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Usage: decrypt, sign

2.3. Получаем root сертификат организации в формате .pem из сертификата формата .cer в кодировке DER.

$ openssl x509 -inform der -in ./root_certificate.cer -out ./root_certificate.pem

2.4. Создаём файл /etc/ppp/openssl.cnf со следующим содержанием:

$ sudo nano /etc/ppp/openssl.cnf
openssl_conf = openssl_def
[ openssl_def ]
engines = engine_section
[ engine_section ]
pkcs11 = pkcs11_section
[ pkcs11_section ]
engine_id = pkcs11
dynamic_path = /usr/lib/x86_64-linux-gnu/openssl-1.0.2/engines/pkcs11.so
MODULE_PATH = /lib64/libASEP11.so
init = 0

2.5. Необходимо разрешить аутентификацию EAP-TLS, закомментировав в файле /etc/ppp/options.pptp строчку refuse-eap

$ sudo nano /etc/ppp/options.pptp

# refuse-eap

2.6. Создаём файл с параметрами подключения /etc/ppp/peers/any-peer-name, в качестве параметра "UserName" указать свой доменный логин, далее в качестве параметра "ca" указать путь до сконвертированного корневого сертификата в формате PEM, в качестве параметров "cert" и "key" указать сохранённые идентификаторы ключа и сертификата с префиксом "pkcs11:"

pty "pptp ***.aladdin-rd.ru --nolaunchpppd"
name isadykov # Имя пользователя (может быть DOMAIN\\username)
remotename ***.aladdin-rd.ru # имя сервера подключения
require-mppe-128
file /etc/ppp/options.pptp
ipparam any-peer-name
need-peer-eap
updetach
usepeerdns
defaultroute
replacedefaultroute
ca /path/to/root_certificate.pem # путь до root.pem
cert pkcs11:xxxxxxxxxxxxxxxxxxxxxxxxxx # certificate ID
key pkcs11:xxxxxxxxxxxxxxxxxxxxxxxxxx # key ID

3.Установка соединения:

$ sudo pon any-peer-name

Разрыв соединения:

$ sudo poff any-peer-name

Включение отладочного вывода в процессе установки соединения:

$ sudo pon klvpn debug dump logfd 2

ПРИЛОЖЕНИЕ:

Инструкция основана на документе.