HowTo: Подключение к Cisco VPN с использованием Aladdin eToken в Linux (Ubuntu)
Сравнительно недавно я решил перевести домашний компьютер с Windows на Linux. То есть идея такая бродила уже некоторое время, подогреваемая новостями с фронтов борьбы с добровольно-принудительной установкой Windows 10 и размышлениями о неизбежном устаревании «семерки» следом за XP, а вот поводом взяться за дело стал выход очередного LTS-релиза Ubuntu. При этом основным мотивом такого перехода я назову простое любопытство: домашний компьютер используется в основном для развлечений, ну а знакомство с новой ОС — развлечение не хуже прочих. Причем развлечение, как мне кажется, полезное в плане расширения кругозора. Дистрибутив же от Canonical был выбран просто как наиболее популярный: считаю при первом знакомстве с системой это немаловажным подспорьем.
Довольно быстро я на собственном опыте убедился, что для котиков и кино Ubuntu вполне подходит. Но, поскольку компьютер используется еще и для удаленной работы, для отказа от Windows не хватало настроенного подключения к Cisco VPN c авторизацией по eToken.
Набор программ
Было ясно, что для подключения понадобятся по меньшей мере драйвер токена и некий VPN-клиент. В результате поисков в сети получился такой список:
- OpenConnect — VPN-клиент, «совершенно случайно» совместимый с серверами Cisco «AnyConnect»
- GnuTLS — свободная реализация протоколов TLS и SSL. Что важно, в состав этой библиотеки входит утилита p11tool для работы со смарт-картами
- SafeNet Authentication Client — набор драйверов и дополнительных утилит, обеспечивающий работу с электронными ключами eToken
Поскольку для установки соединения OpenConnect-у требуется URL сертификата клиента, который можно узнать с помощью утилиты p11tool, и обеим программам требуется драйвер для работы со смарт-картой — с установки этого драйвера и начнем.
Установка клиента eToken
Как резонно замечено в статье про настройку eToken в Ubuntu 12.04, ссылка на SafeNet Authentication Client почти секретная. Но в то же время на просторах интернета нашлась более свежая заметка про аналогичные танцы с бубном уже в 14.04, причем с живой ссылкой на дистрибутив где-то в бразильском филиале SafeNet. Что еще интереснее, на том же сервере есть файл с актуальной версией клиента — 9.1, которая, ура-ура, не требует устаревших библиотек. Правильный же способ получения клиента — конечно обратиться к поставщику вашего ключа.
На текущий момент пакет SafenetAuthenticationClient-9.1.7-0_amd64.deb ( или SafenetAuthenticationClient-9.1.7-0_i386.deb для 32-битных систем ) элементарно ставится двойным щелчком по нему в файловом менеджере. Но во время начала работы над этим материалом еще не была исправлена ошибка в Ubuntu Software, из-за которой не работала установка сторонних пакетов. Поэтому была написана
При успешной установке в меню Applications появляется приложение SafeNet Authentication Client Tools.
Установка и настройка GnuTLS
Дело в том, что в определенный момент я совершенно застрял, не понимая, почему токен из родного клиента виден, а через p11tool — нет. И именно отсюда я понял, где же лежит собственно драйвер. Зная путь к драйверу, ставим и настраиваем GnuTLS по инструкции.
Теперь с токеном смогут работать любые приложения, использующие GnuTLS. А мы сможем воспользоваться утилитой p11tool для выяснения URL-а нашего сертификата.
Чтение данных токена
Вывести список имеющихся в токене сертификатов можно следующей командой:
Вывод p11tool выглядит примерно так:
Object 0:
URL: pkcs11:model=eToken;manufacturer=SafeNet%2c%20Inc.;serial=99999999;token=Username;id=%XX%XX;object=%7bXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX%7d;type=cert
Type: X.509 Certificate
Label:
ID: XX:XX
Object 1:…
Сертификатов может быть несколько, а для подключения требуется один конкретный. В инструкции по p11tool от OpenConnect в такой ситуации предлагают попробовать каждый. Я же для сопоставления сертификата с его URL составил небольшой скрипт, который выводит как URL, так и текстовые данные каждого сертификата:
Здесь в цикле по URL-ам объектов p11tool —info выводит данные сертификата в своем представлении, а p11tool —export передает сертификат в формате pem-файла на вход openssl, который и выводит текстовое представление. Для передачи в OpenConnect нам нужен тот, где найдется строка Client Authentication — запоминаем его URL. Кроме того, если сервер использует самоподписанный сертификат, запоминаем еще и URL объекта с флагом CKA_CERTIFICATE_CATEGORY=CA.
Экспортируем сертификат удостоверяющего центра в файл (весь URL не обязателен — лишь бы он однозначно определял объект):
Наконец-то OpenConnect
Минимальный набор аргументов для подключения приведен в следующей команде:
Если сервер использует самоподписанный сертификат, при запуске в таком виде OpenConnect уточнит, доверяем ли мы серверу, и к тому же будет занято окно терминала. Поэтому слегка расширим команду:
С помощью cafile мы указали сертификат удостоверяющего центра — теперь не будет вопроса относительно доверия серверу. Опция background говорит сама за себя, а pid-file позволяет указать имя файла, в котором сохранится идентификатор фонового процесса. Кроме того, пароль токена может быть указан прямо в URL с помощью атрибута pin-value. Но это несколько… небезопасно.
Останавливать фоновый процесс правильно следующей командой:
По сообщению SIGINT OpenConnect корректно завершает соединение, а если разорвать соединение «жестко», могут быть проблемы при следующем подключении. Хотя у меня не было.
Послесловие
Задача решена, и я радостно пользуюсь для удаленного доступа приложением Remmina, которое запускаю сразу при подключении к vpn, добавив в скрипт запуска OpenConnect команду:
Правда, пришлось отключить синхронизацию буфера обмена: иначе на удаленной машине он в некоторых приложениях не работает; и включить настройку «Disable tray icon»: в противном случае при каждом подключении в трей добавляется новая иконка. Опять же, переход в домашнюю директорию перед вызовом Remmina неспроста: приложение почету-то не видит путь , а задавать полный путь с именем пользователя мне кажется неправильным.
Выводов относительно применимости Linux дома делать не буду — мне пока хватает, а статья задумана именно как HowTo.
P.S.: На окончательный выбор версии Ubuntu повлияло именно решение данной задачи: в пятой, включенной в Ubuntu 14.04, версии OpenConnect обнаружилась ошибка, мешавшая установке соединения. Вот ради лишенной той ошибки седьмой версии OpenConnect я и поставил возможно еще сырую 16.04.
EDIT: в Ubuntu 19.04 обновилась версия libcrypto и даже драйвер, поставляемый с 10 версией SafeNet, не находит данную библиотеку. Спасаемся симлинком
sudo ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 /usr/lib/libcrypto.so
Еще раз ссылки на использованные материалы:
Источник
Драйвер для etoken для linux
Для обеспечения работы с электронными ключами eToken понадобится установить драйвер (http://www.aladdin-rd.ru/support/downloads/etoken/).
Устанавливаем драйвер:
/Desktop# alien -kci ‘/home/qwer/Desktop/pkiclient-5.00.28-0.i386.rpm’
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i pkiclient_5.00.28-0_i386.deb
Selecting previously deselected package pkiclient.
(Reading database . 128922 files and directories currently installed.)
Unpacking pkiclient (from pkiclient_5.00.28-0_i386.deb) .
Setting up pkiclient (5.00.28-0) .
Processing triggers for ureadahead .
Processing triggers for libc-bin .
ldconfig deferred processing now taking place
Устанавливаем КриптоПро CSP 3.6 (обязательные пакеты):
/Desktop/linux-ia32# alien -kci lsb-cprocsp-base-3.6.1-4.noarch.rpm
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i lsb-cprocsp-base_3.6.1-4_all.deb
Selecting previously deselected package lsb-cprocsp-base.
(Reading database . 129507 files and directories currently installed.)
Unpacking lsb-cprocsp-base (from lsb-cprocsp-base_3.6.1-4_all.deb) .
Setting up lsb-cprocsp-base (3.6.1-4) .
Adding system startup for /etc/init.d/cprocsp .
Processing triggers for ureadahead .
/Desktop/linux-ia32# alien -kci lsb-cprocsp-rdr-3.6.1-4.i486.rpm
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i lsb-cprocsp-rdr_3.6.1-4_i386.deb
Selecting previously deselected package lsb-cprocsp-rdr.
(Reading database . 129675 files and directories currently installed.)
Unpacking lsb-cprocsp-rdr (from lsb-cprocsp-rdr_3.6.1-4_i386.deb) .
Setting up lsb-cprocsp-rdr (3.6.1-4) .
Adding new reader:
Nick name: FLASH
Name device: FLASH
/Desktop/linux-ia32# alien -kci lsb-cprocsp-capilite-3.6.1-4.i486.rpm
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i lsb-cprocsp-capilite_3.6.1-4_i386.deb
Selecting previously deselected package lsb-cprocsp-capilite.
(Reading database . 129713 files and directories currently installed.)
Unpacking lsb-cprocsp-capilite (from lsb-cprocsp-capilite_3.6.1-4_i386.deb) .
Setting up lsb-cprocsp-capilite (3.6.1-4) .
/Desktop/linux-ia32# alien -kci lsb-cprocsp-kc1-3.6.1-4.i486.rpm
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i lsb-cprocsp-kc1_3.6.1-4_i386.deb
Selecting previously deselected package lsb-cprocsp-kc1.
(Reading database . 129761 files and directories currently installed.)
Unpacking lsb-cprocsp-kc1 (from lsb-cprocsp-kc1_3.6.1-4_i386.deb) .
Setting up lsb-cprocsp-kc1 (3.6.1-4) .
Устанавливаем модуль поддержки PCSC-считывателей (дополнительный пакет):
/Desktop/linux-ia32# alien -kci cprocsp-rdr-pcsc-3.6.1-4.i486.rpm
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i cprocsp-rdr-pcsc_3.6.1-4_i386.deb
Selecting previously deselected package cprocsp-rdr-pcsc.
(Reading database . 129772 files and directories currently installed.)
Unpacking cprocsp-rdr-pcsc (from cprocsp-rdr-pcsc_3.6.1-4_i386.deb) .
Setting up cprocsp-rdr-pcsc (3.6.1-4) .
Электронный ключ eToken должен стоять в ПК, проверяем через list_pcsc:
available reader: AKS ifdh 00 00
Добавляем считыватель:
/Desktop/linux-ia32# /opt/cprocsp/sbin/ia32/cpconfig -hardware reader -add «AKS ifdh 00 00»
Adding new reader:
Nick name: AKS ifdh 00 00
Просмотр списка настроенных считывателей:
/Desktop/linux-ia32# /opt/cprocsp/sbin/ia32/cpconfig -hardware reader -view
Nick name: AKS ifdh 00 00
Reader name: AKS ifdh 00 00
Nick name: FLASH
Reader name: FLASH
Nick name: HDIMAGE
Reader name: HDIMAGE
Устанавливаем модуль поддержки для etoken:
# alien -kci ‘/home/qwer/Desktop/cprocsp-rdr-etoken_3.6.1-1.0.2-1.i386.rpm’
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i cprocsp-rdr-etoken-3.6.1_1.0.2-1_i386.deb
Selecting previously deselected package cprocsp-rdr-etoken-3.6.1.
(Reading database . 129783 files and directories currently installed.)
Unpacking cprocsp-rdr-etoken-3.6.1 (from cprocsp-rdr-etoken-3.6.1_1.0.2-1_i386.deb) .
Setting up cprocsp-rdr-etoken-3.6.1 (1.0.2-1) .
Просмотр списка настроенных носителей:
# /opt/cprocsp/sbin/ia32/cpconfig -hardware media -view
Nick name: eToken_JAVA_10B
Media name: etoken_java_10b
Nick name: eToken_JAVA_10
Media name: etoken_java_10
Nick name: eToken_PRO_M420B
Media name: etoken_pro_m420b
Nick name: eToken_PRO_M420
Media name: etoken_pro_m420
Nick name: eToken_PRO32
Media name: etoken_pro32
Nick name: eToken_PRO16
Media name: etoken_pro16
Nick name: TRUSTD
Media name: Magistra Debug
Nick name: TRUSTS
Media name: Magistra SocCard
Nick name: TRUST
Media name: Magistra
Nick name: OSCAR2
Connect name: KChannel
Nick name: OSCAR2
Connect name: CSP
Media name: . CSP 2.0
Nick name: OSCAR
Для тестирования создадим самоподписанный сертификат с закрытым ключом:
root@ubuntu:/opt/cprocsp/bin/ia32# ./csptestf -keyset -newkeyset -makecert -cont ‘\\.\AKS ifdh 00 00\test’ -keytype exchange
CSP (Type:75) v3.6.5364 KC1 Release Ver:3.6.7491 OS:Linux CPU:IA32 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 137091795
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 KC1 CSP
Container name: «test»
Exchange key is not available.
Attempting to create an exchange key.
CryptoPro CSP: Set pin-code on produced container «test».
an exchange key created.
Self signed certificate created: E=test@cryptopro.ru, CN=test
Certificate stored in container.
Keys in container:
root@ubuntu:/opt/cprocsp/bin/ia32# /opt/cprocsp/bin/ia32/csptest -oid -general
CSP (Type:75) v3.6.5364 KC1 Release Ver:3.6.7491 OS:Linux CPU:IA32 FastCode:READY:AVX.
CryptAcquireContext succeeded.HCRYPTPROV: 154155347
root@ubuntu:/opt/cprocsp/bin/ia32# lsb_release -a
LSB Version: core-2.0-ia32:core-2.0-noarch:core-3.0-ia32:core-3.0-noarch:core-3.1-ia32:core-3.1-noarch:core-3.2-ia32:core-3.2-noarch:core-4.0-ia32:core-4.0-noarch:cxx-3.0-ia32:cxx-3.0-noarch:cxx-3.1-ia32:cxx-3.1-noarch:cxx-3.2-ia32:cxx-3.2-noarch:cxx-4.0-ia32:cxx-4.0-noarch:graphics-2.0-ia32:graphics-2.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch:graphics-3.1-ia32:graphics-3.1-noarch:graphics-3.2-ia32:graphics-3.2-noarch:graphics-4.0-ia32:graphics-4.0-noarch:printing-3.2-ia32:printing-3.2-noarch:printing-4.0-ia32:printing-4.0-noarch
Источник
Драйвер для etoken для linux
Для обеспечения работы с электронными ключами eToken понадобится установить драйвер (http://www.aladdin-rd.ru/support/downloads/etoken/).
Устанавливаем драйвер:
/Desktop# alien -kci ‘/home/qwer/Desktop/pkiclient-5.00.28-0.i386.rpm’
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i pkiclient_5.00.28-0_i386.deb
Selecting previously deselected package pkiclient.
(Reading database . 128922 files and directories currently installed.)
Unpacking pkiclient (from pkiclient_5.00.28-0_i386.deb) .
Setting up pkiclient (5.00.28-0) .
Processing triggers for ureadahead .
Processing triggers for libc-bin .
ldconfig deferred processing now taking place
Устанавливаем КриптоПро CSP 3.6 (обязательные пакеты):
/Desktop/linux-ia32# alien -kci lsb-cprocsp-base-3.6.1-4.noarch.rpm
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i lsb-cprocsp-base_3.6.1-4_all.deb
Selecting previously deselected package lsb-cprocsp-base.
(Reading database . 129507 files and directories currently installed.)
Unpacking lsb-cprocsp-base (from lsb-cprocsp-base_3.6.1-4_all.deb) .
Setting up lsb-cprocsp-base (3.6.1-4) .
Adding system startup for /etc/init.d/cprocsp .
Processing triggers for ureadahead .
/Desktop/linux-ia32# alien -kci lsb-cprocsp-rdr-3.6.1-4.i486.rpm
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i lsb-cprocsp-rdr_3.6.1-4_i386.deb
Selecting previously deselected package lsb-cprocsp-rdr.
(Reading database . 129675 files and directories currently installed.)
Unpacking lsb-cprocsp-rdr (from lsb-cprocsp-rdr_3.6.1-4_i386.deb) .
Setting up lsb-cprocsp-rdr (3.6.1-4) .
Adding new reader:
Nick name: FLASH
Name device: FLASH
/Desktop/linux-ia32# alien -kci lsb-cprocsp-capilite-3.6.1-4.i486.rpm
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i lsb-cprocsp-capilite_3.6.1-4_i386.deb
Selecting previously deselected package lsb-cprocsp-capilite.
(Reading database . 129713 files and directories currently installed.)
Unpacking lsb-cprocsp-capilite (from lsb-cprocsp-capilite_3.6.1-4_i386.deb) .
Setting up lsb-cprocsp-capilite (3.6.1-4) .
/Desktop/linux-ia32# alien -kci lsb-cprocsp-kc1-3.6.1-4.i486.rpm
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i lsb-cprocsp-kc1_3.6.1-4_i386.deb
Selecting previously deselected package lsb-cprocsp-kc1.
(Reading database . 129761 files and directories currently installed.)
Unpacking lsb-cprocsp-kc1 (from lsb-cprocsp-kc1_3.6.1-4_i386.deb) .
Setting up lsb-cprocsp-kc1 (3.6.1-4) .
Устанавливаем модуль поддержки PCSC-считывателей (дополнительный пакет):
/Desktop/linux-ia32# alien -kci cprocsp-rdr-pcsc-3.6.1-4.i486.rpm
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i cprocsp-rdr-pcsc_3.6.1-4_i386.deb
Selecting previously deselected package cprocsp-rdr-pcsc.
(Reading database . 129772 files and directories currently installed.)
Unpacking cprocsp-rdr-pcsc (from cprocsp-rdr-pcsc_3.6.1-4_i386.deb) .
Setting up cprocsp-rdr-pcsc (3.6.1-4) .
Электронный ключ eToken должен стоять в ПК, проверяем через list_pcsc:
available reader: AKS ifdh 00 00
Добавляем считыватель:
/Desktop/linux-ia32# /opt/cprocsp/sbin/ia32/cpconfig -hardware reader -add «AKS ifdh 00 00»
Adding new reader:
Nick name: AKS ifdh 00 00
Просмотр списка настроенных считывателей:
/Desktop/linux-ia32# /opt/cprocsp/sbin/ia32/cpconfig -hardware reader -view
Nick name: AKS ifdh 00 00
Reader name: AKS ifdh 00 00
Nick name: FLASH
Reader name: FLASH
Nick name: HDIMAGE
Reader name: HDIMAGE
Устанавливаем модуль поддержки для etoken:
# alien -kci ‘/home/qwer/Desktop/cprocsp-rdr-etoken_3.6.1-1.0.2-1.i386.rpm’
error: incorrect format: unknown tag
dpkg —no-force-overwrite -i cprocsp-rdr-etoken-3.6.1_1.0.2-1_i386.deb
Selecting previously deselected package cprocsp-rdr-etoken-3.6.1.
(Reading database . 129783 files and directories currently installed.)
Unpacking cprocsp-rdr-etoken-3.6.1 (from cprocsp-rdr-etoken-3.6.1_1.0.2-1_i386.deb) .
Setting up cprocsp-rdr-etoken-3.6.1 (1.0.2-1) .
Просмотр списка настроенных носителей:
# /opt/cprocsp/sbin/ia32/cpconfig -hardware media -view
Nick name: eToken_JAVA_10B
Media name: etoken_java_10b
Nick name: eToken_JAVA_10
Media name: etoken_java_10
Nick name: eToken_PRO_M420B
Media name: etoken_pro_m420b
Nick name: eToken_PRO_M420
Media name: etoken_pro_m420
Nick name: eToken_PRO32
Media name: etoken_pro32
Nick name: eToken_PRO16
Media name: etoken_pro16
Nick name: TRUSTD
Media name: Magistra Debug
Nick name: TRUSTS
Media name: Magistra SocCard
Nick name: TRUST
Media name: Magistra
Nick name: OSCAR2
Connect name: KChannel
Nick name: OSCAR2
Connect name: CSP
Media name: . CSP 2.0
Nick name: OSCAR
Для тестирования создадим самоподписанный сертификат с закрытым ключом:
root@ubuntu:/opt/cprocsp/bin/ia32# ./csptestf -keyset -newkeyset -makecert -cont ‘\\.\AKS ifdh 00 00\test’ -keytype exchange
CSP (Type:75) v3.6.5364 KC1 Release Ver:3.6.7491 OS:Linux CPU:IA32 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 137091795
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 KC1 CSP
Container name: «test»
Exchange key is not available.
Attempting to create an exchange key.
CryptoPro CSP: Set pin-code on produced container «test».
an exchange key created.
Self signed certificate created: E=test@cryptopro.ru, CN=test
Certificate stored in container.
Keys in container:
root@ubuntu:/opt/cprocsp/bin/ia32# /opt/cprocsp/bin/ia32/csptest -oid -general
CSP (Type:75) v3.6.5364 KC1 Release Ver:3.6.7491 OS:Linux CPU:IA32 FastCode:READY:AVX.
CryptAcquireContext succeeded.HCRYPTPROV: 154155347
root@ubuntu:/opt/cprocsp/bin/ia32# lsb_release -a
LSB Version: core-2.0-ia32:core-2.0-noarch:core-3.0-ia32:core-3.0-noarch:core-3.1-ia32:core-3.1-noarch:core-3.2-ia32:core-3.2-noarch:core-4.0-ia32:core-4.0-noarch:cxx-3.0-ia32:cxx-3.0-noarch:cxx-3.1-ia32:cxx-3.1-noarch:cxx-3.2-ia32:cxx-3.2-noarch:cxx-4.0-ia32:cxx-4.0-noarch:graphics-2.0-ia32:graphics-2.0-noarch:graphics-3.0-ia32:graphics-3.0-noarch:graphics-3.1-ia32:graphics-3.1-noarch:graphics-3.2-ia32:graphics-3.2-noarch:graphics-4.0-ia32:graphics-4.0-noarch:printing-3.2-ia32:printing-3.2-noarch:printing-4.0-ia32:printing-4.0-noarch
Источник