EAP-TLS является протоколом взаимной аутентификации клиента и сервера с использованием сертификатов. Данный метод предусматривает, что для сервера и каждого клиента выпускается отдельный сертификат. За выпуск сертификатов отвечает центр сертификации (далее ЦС).
Для корректной работы EAP-TLS требуется выполнить следующие действия:
Сертификат, используемый NAICE-RADIUS для выполнения EAP-TLS аутентификации, не изменяет сертификат, используемый для EAP-PEAP аутентификации. |
Пример создания запроса на выпуск сертификата и пример управления сертификатами с использованием утилиты OpenSSL приведены в разделе Приложения. |
Установка сертификата может быть выполнена плейбуком Ansible или же при необходимости вручную.
При установке NAICE через OVA-образ установка сертификатов выполняется по инструкции v1.1_3.2.5 Замена сертификатов EAP-TLS. |
При выполнении установки плейбуками Ansible будет выполнен рестарт всех сервисов NAICE, что приведет к кратковременному перерыву связи! |
Для корректной работы требуется файлы сертификатов расположить на хосте, с которого будет выполняться плейбук Ansible в папке ansible/roles/docker/files/eap-tls.
Требуется три файла:
trusted_server.crt;trusted_server_chain.crt (данный сертификат требуется выпустить средствами используемого в организации УЦ);trusted_server.k (ключ генерируется при создании запроса на сертификат).Далее приведен пример с расположением файлов в на хосте выполнения плейбуков 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 |
Для инсталяции с резервированием:
ansible-playbook reservation-naice-services.yml -i hosts.yml |
Можно повторно выполнить плейбук, если ранее при установке NAICE сертификаты для работы EAP-TLS не были установлены. |
Сертификаты на целевой хост копируются в папку, которая указана в переменной naice_docker_path, в подпапку eap-tls. По умолчанию /etc/docker-naice/eap-tls.
При выполнении установки сертификатов вручную будет выполнен рестарт сервиса |
Для корректной работы требуется файлы сертификатов расположить на хосте с NAICE в папке установки системы. По умолчанию это папка /etc/docker-naice/eap-tls.
Требуется три файла:
trusted_server.crt;trusted_server_chain.crt (данный сертификат требуется выпустить средствами используемого в организации УЦ);trusted_server.k (ключ генерируется при создании запроса на сертификат).Далее приведен пример с расположением файлов в на сервере NAICE при использовании пути установки по умолчанию:
$ ls -ln /etc/docker-naice/eap-tls total 12 -rw------- 1 0 0 1314 Aug 19 15:13 trusted_server.crt -rw------- 1 0 0 1854 Aug 19 15:13 trusted_server.k -rw------- 1 0 0 2130 Aug 19 15:13 trusted_server_chain.crt |
Файлы могут иметь произвольное наименование, но рекомендуется не изменять без необходимости.
Последовательность действий (все примеры приведены исходя из того, что используется директория установки NAICE по умолчанию - /etc/docker-naice):
На сервере с NAICE создать директорию, в которую необходимо поместить сертификаты (например, /директория-установки-NAICE/eap-tls):
sudo mkdir /etc/docker-naice/eap-tls |
Проверить и при необходимости назначить корректные права доступа и владельца файлов:
sudo chown root:root /etc/docker-naice/eap-tls sudo chmod 600 /etc/docker-naice/eap-tls |
Пробросить папку с сертификатами в контейнер naice-radius с помощью volume, отредактировав файл docker-compose.yml в папке установки NAICE:
naice-radius:
[...]
volumes:
- ${RADIUS_LOG_PATH}:/opt/var/log/radius
- ./eap-tls:/opt/etc/raddb/certs/eap-tls |
naice-radius:
container_name: naice-radius
image: ${RADIUS_HUB}/naice-radius:${RADIUS_VERSION_TAG}
hostname: ${HOSTNAME}
ports:
- "${RADIUS_AUTH_PORT}:1812/udp"
- "${RADIUS_ACCT_PORT}:1813/udp"
- "${RADIUS_EXPORTER_PORT}:9812/tcp"
env_file: .env
deploy:
resources:
limits:
memory: 512M
reservations:
memory: 256M
restart_policy:
condition: always
healthcheck:
test: "curl http://127.0.0.1:9812/metrics | grep 'freeradius_up 1' || exit 1"
interval: 10s
timeout: 5s
retries: 10
volumes:
- ${RADIUS_LOG_PATH}:/opt/var/log/radius
- ./eap-tls:/opt/etc/raddb/certs/eap-tls
|
Указать названия новых файлов (если были изменены) и пароль к ключу trusted_server.k (если он установлен) в переменных окружения .env, в папке установки NAICE:
RADIUS_EAP_TLS_CERTS_CA_CERT_FILE: trusted_server.crt # Имя файла корневого (CA) сертификата УЦ. RADIUS_EAP_TLS_CERTS_PRIVATE_KEY_FILE: trusted_server.k # Имя файла приватного ключа сертификата RADIUS. RADIUS_EAP_TLS_CERTS_PRIVATE_KEY_PASSWORD: password # Пароль к файлу приватного ключа сертификата RADIUS; оставить пустым, если файл приватного ключа не защищен паролем. RADIUS_EAP_TLS_CERTS_CERTIFICATE_FILE: trusted_server_chain.crt # Имя файла сертификата RADIUS. |
RADIUS_EAP_TLS_OCSP_ENABLE: false # Включить проверку статуса отзыва сертификата по протоколу OCSP (false | true). По умолчанию false (проверка отключена). RADIUS_EAP_TLS_OCSP_OVERRIDE_URL: false # Откуда брать URL OCSP-сервера: false - использовать URL из сертификата пользователя; true - использовать URL из настройки radius_eap_tls_ocsp_url. По умолчанию false. RADIUS_EAP_TLS_OCSP_URL: http://127.0.0.1/ocsp # URL для обращения к OCSP-серверу (разрешен только http-режим). RADIUS_EAP_TLS_OCSP_SOFTFAIL: false # Поведение в случае недоступности OCSP-сервера (false | true): false - прекратить аутентификацию, если не удается получить доступ; true - продолжить аутентификацию без проверки отзыва сертификата, если OCSP-сервер не доступен. RADIUS_EAP_TLS_OCSP_TIMEOUT: 0 # Таймаут обращения к серверу OCSP (секунды). По умолчанию 0. RADIUS_EAP_TLS_OCSP_USE_NONCE: true # Включить одноразовый код nonce в запрос на проверку сертификата для предотвращения подмены запроса (false | true): false - не включать, true - включить. По умолчанию true. |
Примените внесенные настройки с помощью рестарта контейнера naice-radius:
sudo docker compose down naice-radius && sudo docker compose up -d naice-radius |
Проверить что контейнер с naice-radius запущен успешно:
$ sudo docker compose ps -a naice-radius NAME COMMAND SERVICE STATUS PORTS naice-radius "/docker-entrypoint.…" naice-radius running (healthy) 0.0.0.0:1812-1813->1812-1813/udp, 0.0.0.0:9812->9812/tcp, :::1812-1813->1812-1813/udp, :::9812->9812/tcp |
Если контейнер не запущен, надо просмотреть логи на предмет ошибок командой:
$ sudo docker compose logs naice-radius |
Замену сертификатов можно выполнить двумя путями:
Заменить файлы сертификата на сервере на новые с тем же самым именем, перейти в папку установки 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 в новую папку, что приведет к неработоспособности системы! |
Настройка сетевых устройств, политик аутентификации и авторизации, внешних источников идентификации не имеет особенностей и далее в приведенной инструкции не рассматривается. Предполагается, что эти сущности уже настроены. Пример настроек можно посмотреть в v1.1_4. Быстрый запуск (Quickstart).
Авторизация пользователей с использованием протокола 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 10
Порядок настройки подключения клиента на ОС Windows 11
Порядок настройки подключения клиента на ОС Ubuntu 22.04
При необходимости можно создать запрос на выпуск сертификата RADIUS для работы EAP-TLS непосредственно на сервере NAICE или хосте, с которого выполняется запуск плейбуков ansible, с помощью входящий в состав дистрибутивов Linux утилиты openssl:
openssl req -newkey rsa:2048 -nodes -keyout trusted_server.k -out naice.crs -subj "/CN=naice.test.loc" -addext "keyUsage = digitalSignature, keyEncipherment" -addext "extendedKeyUsage = serverAuth, clientAuth" |
В результате будет создано два файла:
trusted_server.k (при необходимости можно использовать другое имя файла);naice.crs.Используя файл запроса на сертификат необходимо выпустить сертификат RADIUS-сервера через УЦ, который используется в организации (например, на базе Windows Server) с именем trusted_server_chain.crt или другим требуемым именем.
Если выпускающий УЦ одновременно является корневым, то достаточно одного сертификата RADIUS. Если же выпускающий УЦ является подчинённым другого УЦ, то требуется сформировать цепочку сертификатов из сертификатов УЦ, начиная с корневого, + сертификата RADIUS, и положить их в один файл. |
Приведенные примеры команд используют для выпуска сертификатов 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 |