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: true # включить копирование сертификатов из директории 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 --ask-become-pass common-naice-services.yml |
Можно повторно выполнять плейбук, если ранее при установке сертификаты для работы EAP-TLS не были установлены. |
Сертификаты на целевой хост копируются в папку, которая указана в переменной "naice_dockedr_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 --ask-become-pass common-naice-services.yml |
При обновлении переменная "naice_dockedr_path" должна соответствовать ранее используемой папки установки. (По умолчанию "/etc/docker-naice/eap-tls"). В противном случае произойдет установка нового экземпляра 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.
В открывшемся окне управления оснасткой в меню "Файл → Добавить или удалить оснастку" выбрать "Сертификаты":
Нажать "Добавить", в открывшемся окне выбрать "моей учетной записи пользователя":
нажать "Готово", затем нажать "ОК".
Откроется консоль "Сертификаты - текущий пользователь".
Если импорт сертификата ЦС, который отвечает за выпуск сертификатов пользователей был выполнен ранее - данное действие выполнять не требуется. |
Раскрыть список хранилищей сертификатов, выбрать "Доверенные корневые центры сертификации" и нажать на правой кнопкой мыши. В открывшемся меню выбрать "Все задачи → Импорт...":
После нажатия на "Импорт..." откроется окно выбора сертификатов. Выбрать сертификат ЦС:
нажать "Далее" и убедится, что импорт сертификата ЦС выполняется в хранилище "Доверенные корневые центры сертификации":
нажать кнопку "Далее" и в следующем окне нажать "Готово". Появится окно с предупреждением системы безопасности, что является нормальным при импорте самоподписного сертификата корневого центра сертификации:
Нажать "Да". Нажать "Ок" после появления сообщения об успешном импорте сертификата.
При импорте сертификат пользователя должен содержать в одном файле сертификат и его ключ. Или же запрос на выпуск импортируемого сертификата должен быть выполнен на данном компьютере под той же УЗ, под которой выполняется импорт сертификата. |
В списке хранилищей сертификатов, выбрать "Личное" и нажать на правой кнопкой мыши. В открывшемся меню выбрать "Все задачи → Импорт...", выбрать сертификат пользователя:
нажать "Далее". Откроется окно, в котором потребуется ввести пароль от ключа сертификата:
ввести пароль и нажать "Далее", в следующем окне "Далее".
В окне завершения импорта убедиться, что сертификат импортируется в хранилище "Личное":
нажать "Готово" и нажать "ОК" в сообщении об успешном импорте сертификатов.
Раскрыть папку "Личное" и встать на папку "Сертификаты". Выбрать ранее импортированный сертификат и дважды нажать на него. Откроется окно со сведениями о сертификате:
Убедится, что сертификат пользователя корректен и есть надпись внизу: "Есть закрытый ключ для этого сертификата."
Нажать "Ок" и закрыть консоль управления сертификатами, на предложении сохранить ответить "Нет" - это не повлияет на установленные сертификаты. Можно сохранить оснастку, чтобы в дальнейшем легко получить доступ к ней.
Для настройки сетевого подключения потребуется перейти "Пуск → Параметры → Сеть и Интернет → Ethernet → Настройка параметров адаптера". В открывшемся окне выбрать адаптер и дважды нажать на него кнопкой мыши - откроется окно свойств. Перейти во вкладку "Проверка подлинности":
Нажать кнопку "Параметры" справа от метода проверки подлинности, в открывшемся окне:
Нажать "Ок."
На вкладке "Проверка подлинности" нажать в нижней части на кнопку "Дополнительные параметры", в открывшемся окне:
Нажать "ОК", и нажать "ОК" закрыв вкладку свойств подключения.
После выполнения данных действий подключить компьютер к сети у убедиться в возможности авторизации с использованием сертификата.
Если на компьютере под одной УЗ есть несколько личных сертификатов - будет предложено выбрать один из них. |
По умолчанию в качестве имени пользователя при выполнении аутентификации по протоколу EAP-TLS используется поле "Common Name" (CN) сертификата. Что бы выбрать произвольное имя пользователя необходимо открыть настройки сетевого подключения: потребуется перейти "Пуск → Параметры → Сеть и Интернет → Ethernet → Настройка параметров адаптера". В открывшемся окне выбрать адаптер и дважды нажать на него кнопкой мыши - откроется окно свойств. Перейти во вкладку "Проверка подлинности":
Нажать кнопку "Параметры" справа от метода проверки подлинности, в открывшемся окне:
Включить галочку "Использовать для подключения другое имя пользователя". Другие настройки надо выполнить в соответствие с инструкцией выше.
Выполнить подключение к сети.
Перед выполнение подключения к сети требуется свернуть все окна настроек, т.к. форма ввода пароля появляется за ними, без появления окна в панели внизу. |
Откроется окно "Выбор сертификата":
"Имя пользователя на сертификате" - выбрать сертификат, если у пользователя их есть несколько.
"Имя пользователя, отсылаемое при подключении" - ввести в имя пользователя.
Нажать "Ок".
Новое имя пользователя будет сохранено только после успешной попытки аутентификации! |
Для настройки подключения потребуется три файла: файл сертификата пользователя, файл ключа сертификата пользователя, файл сертификата ЦС, выпустившего сертификат. |
Перенести файлы на компьютер в отдельную папку.
Перейти в раздел "Настройки → Сеть":
Нажать справа от сетевого подключения, откроется окно настройки, перейти во вкладку "Безопасность":
Нажать "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 |