Конфигурация аутентификации через сертификаты на VPN-сервере OpenConnect (ocserv)

В данном руководстве описан процесс настройки аутентификации с использованием сертификатов на VPN-сервере OpenConnect (ocserv) для операционных систем Debian, Ubuntu, CentOS и RHEL. OpenConnect (ocserv) представляет собой открытую реализацию VPN-протокола Cisco AnyConnect.

В предыдущем материале я описал процесс настройки VPN-сервера OpenConnect с использованием TLS-сертификата от Let’s Encrypt. Поскольку Let’s Encrypt не предоставляет клиентские сертификаты, мы прибегли к аутентификации с помощью пароля. Постоянный ввод логина и пароля может быть неудобным, особенно если используемое клиентское программное обеспечение, например, Cisco AnyConnect для iOS, не поддерживает сохранение паролей. Однако многие клиенты OpenConnect позволяют импортировать пользовательские сертификаты, что исключает необходимость ввода учетных данных. Кроме того, аутентификация через сертификаты обеспечивает более высокий уровень безопасности по сравнению с использованием паролей.

В данном руководстве предполагается, что вы уже настроили VPN-сервер OpenConnect с TLS-сертификатом, полученным от Let’s Encrypt.

sudo certtool --generate-privkey --outfile client-privkey. pem

Подготовьте образец файла сертификата для клиента.

sudo nano client-cert.cfg

Вставьте указанные строки в документ. UID следует использовать в качестве имени пользователя из файла.

/etc/ocserv/ocpasswd

# Параметры сертификата X.509

Организация, обладающая сертификатом.

vpn.example.com

Полное наименование владельца сертификата.

Идентификатор пользователя, которому принадлежит сертификат.

uid = "username"

Срок действия сертификата указывается в днях, начиная с текущей даты. Введите -1, если сертификат не имеет ограничений по времени.

Использование сертификата для клиента TLS.

tls_www_client

Применение сертификата для подписи информации.

signing_key

Применение сертификата для защиты данных с использованием шифрования (требуется для шифров TLS RSA).

Лучше применять разные ключи для шифрования и подписи.

encryption_key

Сохраните файл и закройте его. После этого выполните команду для создания клиентского сертификата, который будет подписан закрытым ключом центра сертификации (CA).

sudo certtool --generate-certificate --load-privkey client-privkey. pem --load-ca-certificate ca-cert. pem --load-ca-privkey ca-privkey. pem --template client-cert.cfg --outfile client-cert. pem

Скомбинируйте клиентский закрытый ключ с сертификатом в файл формата PKCS #12, зашифрованный PIN-кодом.

Читайте также:  Astra Linux Список пользователей для упрощенного входа

sudo certtool --to-p12 --load-privkey client-privkey. pem --load-certificate client-cert. pem --pkcs-cipher aes-256 --outfile client. p12 --outder

Теперь у нас есть клиентский закрытый ключ и сертификат, собранные в едином файле.

client. p12

Имейте в виду, что приложение Cisco AnyConnect для iOS не поддерживает шифрование AES-256 и не сможет использовать сертификат клиента. Для устройств на iOS рекомендуется применять другой шифр.

3des-pkcs12

sudo certtool --to-p12 --load-privkey client-privkey.pem --load-certificate client-cert.pem --pkcs-cipher 3des-pkcs12 --outfile ios-client.p12 --outder

Закрытый ключ клиента и сертификат находятся в одном файле.

ios-client.p12

Этот этап важен, когда в сети VPN подключается несколько пользователей, и каждый из них желает применять свой уникальный закрытый ключ.

Для обеспечения конфиденциальности закрытых ключей пользователей им следует создать запрос на подписание сертификата (CSR), используя свои ключи, и направить его администратору, который осуществит выдачу сертификата. В первую очередь пользователям необходимо создать закрытый ключ и шаблон сертификата с помощью указанных команд. После этого они могут сгенерировать CSR, используя следующую команду. Файл…

request.pem

будет удостоверен с использованием закрытого ключа владельца.

certtool --generate-request --load-privkey client-privkey.pem --template client-cert.cfg --outfile request.pem

Пользователь загружает документы.

request.pem

и

client-cert.cfg

администратору, который осуществляет следующую команду для создания клиентского сертификата.

sudo certtool --generate-certificate --load-ca-certificate ca-cert.pem --load-ca-privkey ca-privkey.pem --load-request request.pem --template client-cert.cfg --outfile client-cert.pem

После этого администратор передает файл.

client-cert.pem

Измените файл конфигурации ocserv.

sudo nano /etc/ocserv/ocserv.conf

В предыдущем руководстве мы ввели строку, которая позволяет активировать аутентификацию с использованием пароля.

auth = "plain[passwd=/etc/ocserv/ocpasswd]"

Для активации аутентификации с помощью сертификата, уберите комментарий с указанной строки.

auth = "certificate"

Если обе строки, упомянутые выше, активированы, это означает, что пользователю необходимо пройти как аутентификацию по паролю, так и по сертификату. Если для проверки личности достаточно только аутентификации по сертификату, следует закомментировать первую строку.

Читайте также:  Как установить другую версию PHP по умолчанию на Ubuntu

Чтобы предоставить пользователям возможность выбирать между аутентификацией с помощью сертификата и пароля, включите следующие строки:

enable-auth = "plain[passwd=/etc/ocserv/ocpasswd]" auth = "certificate"

Теперь определите параметр.

ca-cert

В системах Debian/Ubuntu его устанавливают как

ca-cert = /etc/ssl/certs/ssl-cert-snakeoil. pem

В CentOS 8 и RHEL 8 он установлен в качестве

ca-cert = /etc/ocserv/ca. pem

Необходимо использовать наш собственный сертификат CA для верификации клиентского сертификата, поэтому измените данную строку на

ca-cert = /etc/ocserv/ssl/ca-cert. pem

Затем обнаружьте следующий ряд.

cert-user-oid = 0.9.2342.19200300.100.1.1

Эту строку трогать не следует. Просто имейте в виду, что

0.9.2342.19200300.100.1.1

представляет собой поле UID в сертификате клиента. Эта строка информирует демон о…

ocserv

Имя пользователя нужно находить в поле UID клиентского сертификата. При условии успешной проверки клиентского сертификата центром сертификации и демоном…

ocserv

выискивает подходящее имя пользователя в документе

/etc/ocserv/ocpasswd

Таким образом, клиент получит возможность зайти в систему.

Сохраните изменения и закройте документ. После этого выполните перезапуск.

ocserv

sudo systemctl restart ocserv

Применение сертификатной аутентификации на настольных системах Debian, Ubuntu, CentOS и RHEL.

scp

для загрузки файла

client. p12

на вашем рабочем столе Debian/Ubuntu/CentOS/RHEL.

scp :/etc/ocserv/ssl/client. p12 ~

После этого установите клиентское программное обеспечение.

openconnect

sudo apt install openconnect

sudo dnf install epel-release sudo dnf install openconnect

Для применения аутентификации с помощью сертификата, выполните следующую команду.

sudo openconnect - b vpn. example.com - c client. p12

Вам будет предложено активировать приватный ключ клиента, используя пароль, установленный ранее в данном руководстве.

сертификат клиента ocserv на ubuntu

При корректном вводе парольной фразы вы сможете подключиться к VPN-серверу.

Применение сертификационной аутентификации на системах Windows и MacOS. Загрузите клиент OpenConnect GUI для Windows или MacOS с официальной страницы OpenConnect GUI на GitHub. После этого создайте новый профиль VPN-соединения и загрузите файл PKCS #12 в раздел пользовательского сертификата. Нажмите «Сохранить». Вам потребуется ввести PIN-код для разблокировки закрытого ключа, после чего имя пользователя и пароль вводить не понадобится.

Читайте также:  Как в Linux дать все права на папку?

аутентификация сертификата клиента в графическом интерфейсе openconnect

Применение сертификатной аутентификации на устройствах iOS. Пользователи iOS имеют возможность воспользоваться приложением Cisco AnyConnect. Для того чтобы импортировать клиентский сертификат в это приложение, сначала отправьте файл PKCS #12 себе на электронную почту в виде вложения. Затем откройте почтовое приложение на вашем устройстве iOS. Нажмите на вложение и удерживайте его несколько секунд, после чего выберите опцию поделиться через AnyConnect. Введите PIN-код для завершения импорта файла.

Импорт сертификата клиента в iOS AnyConnect.

После импорта отредактируйте ваше VPN-подключение в AnyConnect. Перейдите в Дополнительно ->Выберите клиентский сертификат и сохраните изменения в настройках. Теперь вводить имя пользователя и пароль на вашем iOS-устройстве больше не потребуется. Приложение Cisco AnyConnect не сохраняет учетные данные, поэтому при аутентификации с помощью пароля VPN-соединение будет разрываться при бездействии телефона. При использовании аутентификации по сертификату приложение автоматически восстановит соединение с VPN-сервером в случае его потери.

В обновленной версии клиента AnyConnect для iOS наблюдается неисправность при аутентификации с использованием сертификата в протоколе TLS 1.3. Если в журнале ocserv (sudo journalctl — eu ocserv) появляется аналогичное сообщение об ошибке, значит, вы столкнулись с той же проблемой.

GnuTLS error (at worker-vpn. c:795): A TLS fatal alert has been received.

Для работы с клиентом AnyConnect на iOS вам следует либо применить аутентификацию по паролю, либо отключить TLS 1.3 в конфигурации ocserv. Для этого откройте файл /etc/ocserv/ocserv.conf, найдите параметр tls-priorities и добавьте в конец строку :-VERS-TLS1.3, чтобы деактивировать TLS 1.3.

tls-priorities

Сохраните файл и закройте его. После этого перезапустите ocserv.

sudo systemctl restart ocserv

Обратите внимание: если в логах ocserv встречается упоминание SSL 3.3, не стоит паниковать. SSL 3.3 — это альтернатива для TLS 1.2. Ваше соединение является безопасным с использованием TLS.