EAP-TLS является протоколом взаимной аутентификации клиента и сервера с использованием сертификатов. Данный метод предусматривает, что для сервера и каждого клиента выпускается отдельный сертификат. За выпуск сертификатов отвечает центр сертификации (далее ЦС).
Для корректной работы EAP-TLS требуется выполнить следующие действия:
Установка сертификатов выполняется плейбуком Ansible. Для корректной работы требуется файлы сертификата расположить на хосте, с которого будет выполняться плейбук Ansible в папке ansible/roles/docker/files/eap-tls.
Требуется три файла:
Далее приведен пример с расположением файлов в на хосте выполнения плейбуков Ansible:
$ls -lh ansible/roles/docker/files/eap-tls -rw-rw-r-- 1 root root 1,4K ноя 19 15:44 trusted_server.crt -rw-rw-r-- 1 root root 1,4K ноя 22 05:20 trusted_server_chain.crt -rw------- 1 root root 1,9K ноя 22 05:19 trusted_server.k |
Файлы могут иметь произвольное наименование.
После это требуется в файле ansible/group_vars/all.yml указать значения переменных:
# параметры для авторизации по протоколу EAP-TLS # параметры сертификатов # для включения установки сертификатов протокола EAP-TLS необходимо расположить файлы сертификатов сервера в папке ansible/roles/docker/files/eap-tls radius_eap_tls_cert_dir_copy: false # включить копирование сертификатов из директории ansible/roles/docker/files/eap-tls radius_eap_tls_certs_ca_cert_file: trusted_server.crt # имя файла корневого (CA) сертификата radius_eap_tls_certs_private_key_file: trusted_server.k # имя файла приватного ключа сертификата сервера radius_eap_tls_certs_private_key_password: # пароль к файлу приватного ключа сертификата сервера, оставьте пустым, если файл приватного ключа не запаролен radius_eap_tls_certs_certificate_file: trusted_server_chain.crt # имя файла серверного сертификата |
Указать при необходимости параметры взаимодействия с OCSP-сервером:
# настройки проверки статуса отозванных сертификатов по протоколу OCSP radius_eap_tls_ocsp_enable: 'false' # Включение проверки статуса отзыва сертификата по протоколу OCSP radius_eap_tls_ocsp_override_url: 'false' # Использовать URL сервиса OCSP из сертификата radius_eap_tls_ocsp_url: 'http://127.0.0.1/ocsp' # URL для обращения к сервису OCSP radius_eap_tls_ocsp_softfail: 'false' # Мягкая проверка доступа к серверу проверки OSCP, если сервер недоступен, процесс не завершится, а продолжится radius_eap_tls_ocsp_timeout: 0 # Таймаут обращения к серверу OSCP radius_eap_tls_ocsp_use_nonce: 'true' # Позволяет включить одноразовый код в запрос - nonce, который может быть включен в соответствующий ответ |
Работа с OCSP-сервером поддержана только по протоколу HTTP с реализацией MS Windows Server! |
Описание параметров:
| Параметр | Назначение |
|---|---|
| radius_eap_tls_cert_dir_copy | Переменная, отвечающая за копирование сертификатов из папки на целевой хост и использование их в сервисе nacie-radius. Значение по умолчанию false, в этом случае аутентификация по протоколу EAP-TLS считается неиспользуемой и работать не будет. Копирование файлов на целевой хост также выполняться не будет. |
| radius_eap_tls_certs_ca_cert_file | Имя файла корневого сертификата ЦС. |
| radius_eap_tls_certs_private_key_file | Имя файла приватного ключа сервера. |
| radius_eap_tls_certs_private_key_password | Пароль к файлу приватного ключа сервера. Если значение не указано, считается что пароль не используется. В пароле не допускается использовать символы: $, ', ", `, знаки скобок и пробел. |
| radius_eap_tls_certs_certificate_file | Имя файла сертификата сервера. |
| radius_eap_tls_ocsp_enable | Включить проверку статуса отзыва сертификата по протоколу OCSP (false | true). По умолчанию false (проверка отключена). |
| radius_eap_tls_ocsp_override_url | Откуда брать URL OCSP-сервера: false - использовать URL из сертификата пользователя; true - использовать URL из настройки radius_eap_tls_ocsp_url. По умолчанию false. |
| radius_eap_tls_ocsp_url | URL для обращения к OCSP-серверу (разрешен только http-режим). |
| radius_eap_tls_ocsp_softfail | Поведение в случае недоступности OCSP-сервера (false | true): false - прекратить аутентификацию, если не удается получить доступ; true - продолжить аутентификацию без проверки отзыва сертификата, если OCSP-сервер не доступен. |
| radius_eap_tls_ocsp_timeout | Таймаут обращения к серверу OCSP (секунды). По умолчанию 0. |
| radius_eap_tls_ocsp_use_nonce | Включить одноразовый код nonce в запрос на проверку сертификата для предотвращения подмены запроса (false | true): false - не включать, true - включить. По умолчанию true. |
Сохранить значения переменных и выполнить плейбук ansible:
ansible-playbook install-naice.yml -i hosts.yml |
Можно повторно выполнять плейбук, если ранее при установке сертификаты для работы EAP-TLS не были установлены. |
Сертификаты на целевой хост копируются в папку, которая указана в переменной naice_docker_path, в подпапку eap-tls. По умолчанию /etc/docker-naice/eap-tls.
Замену сертификатов можно выполнить двумя путями:
Заменить файлы сертификата на сервере на новые с тем же самым именем, перейти в папку установки NAICE и выполнить рестарт сервиса NAICE-RADIUS:
sudo docker compose stop naice-radius && sudo docker compose up -d naice-radius |
Скопировать новые файлы сертификата и сервера ЦС. Если были изменены имена файлов, необходимо в плейбуке ansible исправить значения переменных и выполнить повторный запуск плейбука:
ansible-playbook install-naice.yml -i hosts.yml |
При обновлении переменная naice_docker_path должна соответствовать ранее используемой папки установки (по умолчанию -/etc/docker-naice). В противном случае произойдет установка нового экземпляра NAICE в новую папку, что приведет к неработоспособности системы! |
Настройка сетевых устройств, политик аутентификации и авторизации, внешних источников идентификации не имеет особенностей и далее в приведенной инструкции не рассматривается. Предполагается, что эти сущности уже настроены.
Авторизация пользователей с использованием протокола EAP-TLS имеет следующие особенности:
Работа с OCSP-сервером поддержана только по протоколу HTTP с реализацией MS Windows Server! |
Настройка выполняется в разделе Администрирование → Управление идентификацией → Цепочки идентификаций при создании или редактировании цепочки идентификаций:

Необходимо включить настройку , после этого станет доступен выбор атрибутов:
Сравнение значения выбранного атрибута выполняется для источников типа ACTIVE DIRECTORY или LDAP со значением атрибута, выбранного в поле Subject Name Attribute.
Для внутреннего источника идентификации (Internal DB) сравнение выполняется со значением указанным в поле Логин пользователя. Значение в поле должно соответствовать значению в выбранном атрибуте для успешной проверки аутентификации.
Если сертификат пользователя не содержит атрибут, используемый для идентификации, запрос на аутентификацию будет отклонен. |
Аутентификация пользователя без проверки соответствия имени пользователя или выбранного атрибута сертификата только по факту валидности сертификата невозможна! |
Далее приведен пример настройки проверки сертификата по атрибуту Subject - Common Name с использованием ранее настроенного источника данных AD:

Настройка возможности использовать протокол EAP-TLS выполняется в разделе Политики доступа → Элементы → Разрешенные протоколы. В списке разрешенных протоколов по умолчанию Default protocols поддержка протокола уже включена. Если создается новый список доступных протоколов, необходимо включить поддержку EAP-TLS:


Пример успешной авторизации в разделе Мониторинг → RADIUS:

Пример, отображаемый при нажатии иконки в столбце Подробнее для пользователя:

Выпуск и распространение сертификатов может выполняться средствами центра сертификации ОС Windows Server. В данной статье этот способ не рассматривается, рекомендуется обратиться к документации производителя. Далее будет рассмотрено управление сертификатами на компьютере с ОС Windows 10. |
Если запрос на выпуск сертификата не был создан на компьютере, на который выполняется импорт сертификата под той же УЗ, потребуется сформировать один файл, содержащий сертификат и ключ (например контейнер PFX). |
Файл сертификата пользователя, а также сертификат ЦС требуется передать на клиентский компьютер. Для добавления сертификатов потребуются права администратора. Добавление сертификатов выполняется через консоль MMC.
В меню Пуск → Выполнить (WIN + R), ввести mmc и нажать Enter:

В появившемся окне Контроль учетных записей подтвердить (нажать кнопку Да) для доступа к консоли управления MMC.
В открывшемся окне управления оснасткой в меню Файл → Добавить или удалить оснастку выбрать Сертификаты:

Нажать Добавить. В открывшемся окне выбрать моей учетной записи пользователя:

Нажать Готово, затем нажать ОК.
Откроется консоль Сертификаты - текущий пользователь.
Если импорт сертификата ЦС, который отвечает за выпуск сертификатов пользователей был выполнен ранее, данное действие выполнять не требуется. |
Раскрыть список хранилищ сертификатов и правой кнопкой мыши выбрать Доверенные корневые центры сертификации. В открывшемся меню выбрать Все задачи → Импорт...:

После нажатия на Импорт... откроется окно выбора сертификатов. Выбрать сертификат ЦС:

Нажать Далее и убедиться, что импорт сертификата ЦС выполняется в хранилище Доверенные корневые центры сертификации:

Нажать кнопку Далее и в следующем окне нажать Готово. Появится окно с предупреждением системы безопасности, что является нормальным при импорте самоподписного сертификата корневого центра сертификации:

Последовательно друг за другом нажать Да и нажать ОK после появления сообщения об успешном импорте сертификата.
При импорте сертификат пользователя должен содержать в одном файле сертификат и его ключ. Или же запрос на выпуск импортируемого сертификата должен быть выполнен на данном компьютере под той же УЗ, под которой выполняется импорт сертификата. |
В списке хранилищ сертификатов выбрать Личное и нажать на правую кнопку мыши. В открывшемся меню выбрать Все задачи → Импорт..., выбрать сертификат пользователя:

Нажать Далее. Откроется окно, в котором потребуется ввести пароль от ключа сертификата:

Ввести пароль и нажать Далее, в следующем окне Далее.
В окне завершения импорта убедиться, что сертификат импортируется в хранилище Личное:

Нажать Готово → ОК в сообщении об успешном импорте сертификатов.
Перейти в папку Личное → Сертификаты. Выбрать ранее импортированный сертификат и дважды нажать на него. Откроется окно со сведениями о сертификате:

Убедиться, что сертификат пользователя корректен и есть надпись внизу: Есть закрытый ключ для этого сертификата.
Нажать ОK и закрыть консоль управления сертификатами, на предложении сохранить ответить Нет - это не повлияет на установленные сертификаты. Можно сохранить оснастку, чтобы в дальнейшем легко получить доступ к ней.
Для настройки сетевого подключения потребуется перейти Пуск → Параметры → Сеть и Интернет → Ethernet → Настройка параметров адаптера. В открывшемся окне выбрать адаптер, дважды нажать на него левой кнопкой мыши и перейти в окно свойств. Перейти во вкладку Проверка подлинности:

Нажать кнопку Параметры справа от метода проверки подлинности, в открывшемся окне:

Нажать ОK.
На вкладке Проверка подлинности нажать в нижней части на кнопку Дополнительные параметры, в открывшемся окне:

Повторно в двух окнах подряд нажать ОК, закрыв вкладку свойств подключения.
После выполнения данных действий подключить компьютер к сети и убедиться в возможности авторизации с использованием сертификата.
Если на компьютере под одной УЗ есть несколько личных сертификатов, то будет предложено выбрать один из них. |
По умолчанию в качестве имени пользователя при выполнении аутентификации по протоколу EAP-TLS используется поле Common Name (CN) сертификата. Чтобы выбрать произвольное имя пользователя, необходимо открыть настройки сетевого подключения: потребуется перейти Пуск → Параметры → Сеть и Интернет → Ethernet → Настройка параметров адаптера. В открывшемся окне выбрать адаптер, дважды нажать на него левой кнопкой мыши и перейти в окно свойств. Перейти во вкладку Проверка подлинности:

Нажать кнопку Параметры справа от метода проверки подлинности, в открывшемся окне:

Включить галочку Использовать для подключения другое имя пользователя. Другие настройки надо выполнить в соответствии с инструкцией выше.
Выполнить подключение к сети.
Перед выполнение подключения к сети требуется свернуть все окна настроек, т. к. форма ввода пароля появляется за ними, без появления окна в панели внизу. |
Откроется окно Выбор сертификата:

Нажать ОK.
Новое имя пользователя будет сохранено только после успешной попытки аутентификации! |
Для настройки подключения потребуется три файла: файл сертификата пользователя, файл ключа сертификата пользователя, файл сертификата ЦС, выпустившего сертификат. |
Перенести файлы на компьютер в отдельную папку.
Перейти в раздел Настройки → Сеть:

Нажать
справа от сетевого подключения, откроется окно настройки, перейти во вкладку Безопасность:

Нажать Apply.
После выполнения данных действий подключить компьютер к сети и убедиться в возможности авторизации с использованием сертификата.
Приведенные примеры команд используют для выпуска сертификатов OpenSSL версии 3.0.13.
Выпустить корневой сертификат ЦС:
openssl req -x509 -new -newkey rsa:2048 -keyout ca.key -out ca.crt -days 3650 -subj "/C=RU/ST=Russia/L=Test/O=Test ORG/OU=QA/CN=ca.test.loc" -addext "keyUsage = digitalSignature, keyEncipherment, keyCertSign" |
Ввести пароль ключа сертификата ЦС. Данный пароль будет необходимо использовать при выпуске любого сертификата:
$openssl req -x509 -new -newkey rsa:2048 -keyout ca.key -out ca.crt -days 3650 -subj "/C=RU/ST=Russia/L=Test/O=Test ORG/OU=QA/CN=ca.test.loc" -addext "keyUsage = digitalSignature, keyEncipherment, keyCertSign" Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- |
Если пароль к ключу сертификата не требуется, необходимо добавить опцию -nodes при генерации ключа сертификата:
openssl req -x509 -new -newkey rsa:2048 -nodes -keyout ca.key -out ca.crt -days 3650 -subj "/C=RU/ST=Russia/L=Test/O=Test ORG/OU=QA/CN=ca.test.loc" -addext "keyUsage = digitalSignature, keyEncipherment, keyCertSign" |
В результате будет создано два файла ca.pem и ca.key.
Создать файл конфигурации server.cnf, который будет отвечать за подпись запроса на сертификат для сервера:
[ signing_req ] keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth |
Создать запрос на сертификат для RADIUS-сервера:
openssl req -new -newkey rsa:2048 -keyout radius.key -out radius.csr -subj "/C=RU/ST=Russia/L=Test City/O=Tester's ORG/OU=QA/CN=radius.test.loc" |
Выпустить сертификат на основе ранее созданного запроса с использованием файла конфигурации server.cnf:
openssl x509 -req -in radius.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile server.cnf -extensions signing_req -out radius.crt |
В итоге получится два файла, которые потребуются в настройках NAICE-RADIUS: radius.crt и radius.key.
Создать файл конфигурации clients.cnf, который будет отвечать за подпись запроса на сертификат для сервера:
[ signing_req ] keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = clientAuth |
Создать запрос на сертификат для RADIUS-сервера:
openssl req -new -newkey rsa:2048 -keyout client1.key -out client1.csr -subj "/C=RU/ST=Russia/L=Test City/O=Tester's ORG/OU=QA/CN=client.test.loc" |
Выпустить сертификат на основе ранее созданного запроса с использованием файла конфигурации server.cnf:
openssl x509 -req -in client1.csr -CA ca.crt -CAkey ca.key -CAcreateserial -extfile clients.cnf -extensions signing_req -out client1.crt |
В итоге будет создано два файла, которые потребуются в настройках пользователя: client1.crt и client1.key.
Сертификаты, создаваемые ЦС Windows Server, могут быть сформированы в DER-кодировке. Такой сертификат требует преобразования перед использованием в NAICE-RADIUS или пользователем с ОС Linux. Конвертация может быть выполнена утилитой OpenSSL:
openssl x509 -inform der -in client1.cer -out client1.crt |
Для использования сертификата в ОС Windows его требуется преобразовать в формат контейнера сертификата. Конвертация может быть выполнена утилитой OpenSSL (потребуется ввести пароль от ключа сертификата и задать пароль контейнера):
openssl pkcs12 -export -out client1.pfx -inkey client1.key -in client1.crt |
Извлечение сертификатов из контейнера (потребуется ввести пароль контейнера):
openssl pkcs12 -in client1.pfx -nokeys -out client1.pem |
Следует иметь ввиду, что в случае, если в контейнере содержаться несколько сертификатов, все они будут извлечены и записаны в один файл.
Извлечение ключа сертификата из контейнера (потребуется ввести пароль контейнера и задать пароль закрытого ключа):
openssl pkcs12 -in client1.pfx -nocerts -aes256 -out client1.key |
Извлечение ключа сертификата PEM, если в один файл записаны ключ и сертификаты (потребуется ввести и повторно задать пароль ключа):
openssl rsa -aes128 -in client1.pem -out client1.key |