Общее описание
EAP-TLS является протоколом взаимной аутентификации клиента и сервера с использованием сертификатов. Данный метод предусматривает, что для сервера и каждого клиента выпускается отдельный сертификат. За выпуск сертификатов отвечает центр сертификации (далее ЦС).
Для корректной работы EAP-TLS требуется выполнить следующие действия:
- Выпустить сертификат сервера.
- Преобразовать сертификат в требуемый формат и расположить его на сервере с NAICE.
- Указать необходимые настройки в переменных плейбука установки ansible.
- Выполнить плейбук ansible и включить использование сертификата сервера.
- Настроить авторизацию в NAICE с использованием сертификатов.
- Выпустить сертификат пользователя.
- Настроить на эндпоинте аутентификацию с помощью выпущенного сертификата пользователя.
- Проверить работу аутентификации.
Требования и ограничения
Общие требования
- Работа с сертификатами использующими ГОСТ шифрование не поддерживается.
- Eltex-NAICE не имеет встроенного средства управления сертификатами. Выпуск и управление жизненным циклом сертификатов возлагается на стороннее ПО (например ЦС Windows Server или утилиту OpenSSL).
Требования к сертификату используемому сервисом NAICE-RADIUS
- Сертификат используемый сервисом должен иметь формат PEM или CRT, без включения ключа шифрования в сертификат сервера.
- Использование DER кодировки не поддержано.
- Использование сертификатов в контейнере PKCS не поддержано.
- В пароле к приватному ключу не допускается использовать символы: $, ', ", `, знаки скобок и пробел.
- Возможно использование только одного сертификата сервисом NAICE-RADIUS.
- Сертификат используемый NAICE-RADIUS для выполнения EAP-TLS аутентификации не изменяет сертификат используемый для EAP-PEAP аутентификации.
- Сертификат используемый NAICE-RADIUS должен содержать атрибуты:
- Subject: CN
- X509v3 Key Usage: Digital Signature, Key Encipherment
- X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication
- Сертификат используемый пользователем должен содержать атрибуты:
- Subject: CN
- X509v3 Key Usage: Digital Signature, Key Encipherment
- X509v3 Extended Key Usage: TLS Web Client Authentication
Требования к OCSP серверу
- Поддерживается реализация сервера OCSP MS Windows Server.
- Поддержан режим только HTTP (без TLS шифрования).
Установка сертификатов
Установка сертификатов выполняется плейбуком Ansible. Для корректной работы требуется файлы сертификата расположить на хосте, с которого будет выполняться плейбук Ansible в папке "ansible/roles/docker/files/eap-tls".
Требуется три файла:
- Файл сертификата ЦС, который отвечает за выпуск сертификатов используемых для аутентификации, в формате "pem" или "crt".
- Файл сертификата который будет использоваться NAICE-RADIUS для проверки сертификатов пользователей.
- Файл ключа сертификата NAICE-RADIUS.
Далее приведен пример с расположением файлов в на хосте выполнения плейбуков 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
После это требуется в файле "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 в новую папку, что приведет к неработоспособности системы!
Настройка NAICE
Общее описание
Настройка сетевых устройств, политик аутентификации и авторизации, внешних источников идентификации не имеет особенностей и далее в приведенной инструкции не рассматривается. Предполагается, что эти сущности уже настроены.
Авторизация пользователей с использованием протокола EAP-TLS имеет следующие особенности:
- По умолчанию имя пользователя из поля User-Name RADIUS-запроса ищется в цепочке источников идентификации. В случае если совпадение не найдено - запрос на аутентификацию отклоняется, даже при использовании валидного сертификата пользователем.
- В настройках цепочки идентификаций может быть переопределено какой атрибут из сертификата использовать для проверки имени пользователя.
- Если включена проверка отзыва сертификата по протоколу OCSP - выполняется проверка статуса отзыва сертификата. Если сертификат отозван - запрос на аутентификацию будет отклонен.
- Поведение в случае недоступности OCSP сервера определяется переменной "radius_eap_tls_ocsp_softfail". Если значение "false" - запрос на аутентификацию будет отклонен в случае недоступности OCSP сервера. При значение "true" аутентификация будет продолжена, если не удалось проверить статус отзыва сертификата.
- Параметры используемых для авторизации сертификатов и настроек взаимодействия с OCSP выполняются через переменные окружения. После изменения переменных требуется рестарт сервиса NAICE-RADIUS, что может вызвать кратковременный сбой работы аутентификации в момент выполнения перезапуска.
Работа с OCSP-сервером поддержана только по протоколу HTTP с реализацией MS Windows Server!
Настройка используемого атрибута сертификата в цепочке идентификаций
Настройка выполняется в разделе "Администрирование - Управление идентификацией - Цепочки идентификаций" при создании или редактировании цепочки идентификаций:
Необходимо включить настройку "", после этого станет доступен выбор атрибутов:
- Subject - Common Name
- Subject - Serial Number
- Subject
- Subject Alternative Name - Email
- Subject Alternative Name - DNS
Сравнение значения выбранного атрибута выполняется для источников типа "ACTIVE DIRECTORY" или "LDAP" со значением атрибута, выбранного в поле "Subject Name Attribute".
- Для схемы типа "ACTIVE DIRECTORY" это атрибут "userPrincipalName", который не может быть изменен.
- Для схемы типа "CUSTOM" используется по умолчанию атрибут "uid", который может быть изменен.
Для внутреннего источника идентификации (Internal DB) сравнение выполняется со значением указанным в поле "Логин" пользователя. Значение в поле должно соответствовать значению в выбранном атрибуте для успешной проверки аутентификации.
Если сертификат пользователя не содержит атрибут, используемый для идентификации - запрос на аутентификацию будет отклонен.
Аутентификация пользователя без проверки соответствия имени пользователя или выбранного атрибута сертификата, только по факту валидности сертификата невозможна!
Далее приведен пример настройки проверки сертификата по атрибуту "Subject - Common Name" с использованием ранее настроенного источника данных AD:
Управление в службе доступных протоколов
Настройка возможности использовать протокол EAP-TLS выполняется в разделе "Политика → Элементы → Результаты → Доступные протоколы". В службе доступных протоколов по умолчанию "Default protocols" поддержка протокола уже включена. Если создается новый список доступных протоколов необходимо включить поддержку EAP-TLS:
Пример настройки политики
Пример успешной авторизации в разделе "Мониторинг → RADIUS":
Пример "Подробнее" для пользователя:
Настройка подключения на клиентском устройстве
Windows 10
Выпуск и распространение сертификатов может выполняться средствами центра сертификации ОС Windows Server. В данной статье этот способ не рассматривается, рекомендуется обратиться к документации производителя.
Далее будет рассмотрено управление сертификатами на компьютере с ОС Windows 10.
Если запрос на выпуск сертификата не был создан на компьютере, на который выполняется импорт сертификата под той же УЗ - потребуется сформировать один файл, содержащий сертификат и ключ (например контейнер PFX).
Файл сертификата пользователя, а так же сертификат ЦС требуется передать на клиентский компьютер. Для добавления сертификатов потребуются права администратора. Добавление сертификатов выполняется через консоль MMC.
Открытие консоли управления сертификатами
В меню "Пуск → Выполнить" (WIN + R), ввести "mmc" и нажать "Enter":
В появившемся окне "Контроль учетных записей" подтвердить (нажать "Да") для доступа к консоли управления MMC.
В открывшемся окне управления оснасткой в меню "Файл → Добавить или удалить оснастку" выбрать "Сертификаты":
Нажать "Добавить", в открывшемся окне выбрать "моей учетной записи пользователя":
нажать "Готово", затем нажать "ОК".
Откроется консоль "Сертификаты - текущий пользователь".
Добавление корневого сертификата ЦС
Если импорт сертификата ЦС, который отвечает за выпуск сертификатов пользователей был выполнен ранее - данное действие выполнять не требуется.
Раскрыть список хранилищей сертификатов, выбрать "Доверенные корневые центры сертификации" и нажать на правой кнопкой мыши. В открывшемся меню выбрать "Все задачи → Импорт...":
После нажатия на "Импорт..." откроется окно выбора сертификатов. Выбрать сертификат ЦС:
нажать "Далее" и убедится, что импорт сертификата ЦС выполняется в хранилище "Доверенные корневые центры сертификации":
нажать кнопку "Далее" и в следующем окне нажать "Готово". Появится окно с предупреждением системы безопасности, что является нормальным при импорте самоподписного сертификата корневого центра сертификации:
Нажать "Да". Нажать "Ок" после появления сообщения об успешном импорте сертификата.
Добавление сертификата пользователя
При импорте сертификат пользователя должен содержать в одном файле сертификат и его ключ. Или же запрос на выпуск импортируемого сертификата должен быть выполнен на данном компьютере под той же УЗ, под которой выполняется импорт сертификата.
В списке хранилищей сертификатов, выбрать "Личное" и нажать на правой кнопкой мыши. В открывшемся меню выбрать "Все задачи → Импорт...", выбрать сертификат пользователя:
нажать "Далее". Откроется окно, в котором потребуется ввести пароль от ключа сертификата:
ввести пароль и нажать "Далее", в следующем окне "Далее".
В окне завершения импорта убедиться, что сертификат импортируется в хранилище "Личное":
нажать "Готово" и нажать "ОК" в сообщении об успешном импорте сертификатов.
Раскрыть папку "Личное" и встать на папку "Сертификаты". Выбрать ранее импортированный сертификат и дважды нажать на него. Откроется окно со сведениями о сертификате:
Убедится, что сертификат пользователя корректен и есть надпись внизу: "Есть закрытый ключ для этого сертификата."
Нажать "Ок" и закрыть консоль управления сертификатами, на предложении сохранить ответить "Нет" - это не повлияет на установленные сертификаты. Можно сохранить оснастку, чтобы в дальнейшем легко получить доступ к ней.
Настройка сетевого подключения
Для настройки сетевого подключения потребуется перейти "Пуск → Параметры → Сеть и Интернет → Ethernet → Настройка параметров адаптера". В открывшемся окне выбрать адаптер и дважды нажать на него кнопкой мыши - откроется окно свойств. Перейти во вкладку "Проверка подлинности":
- "Выберите метод проверки подлинности в сети:" - выбрать "Microsoft: смарт-карта или иной сертификат.
- "Запоминать мои учетные данные для этого подключения при каждом входе в систему" - включить.
Нажать кнопку "Параметры" справа от метода проверки подлинности, в открывшемся окне:
- "Использовать сертификат на этом компьютере" - выбрать.
- "Подтверждать удостоверение сервера с помощью проверки сертификата" - включить.
- "Доверенные корневые центры сертификации" - выбрать ранее импортированный сертификат ЦС.
Нажать "Ок."
На вкладке "Проверка подлинности" нажать в нижней части на кнопку "Дополнительные параметры", в открывшемся окне:
- "Указать режим проверки подлинности" - включить, выбрать "Проверка подлинности пользователя".
Нажать "ОК", и нажать "ОК" закрыв вкладку свойств подключения.
После выполнения данных действий подключить компьютер к сети у убедиться в возможности авторизации с использованием сертификата.
Если на компьютере под одной УЗ есть несколько личных сертификатов - будет предложено выбрать один из них.
Ubuntu 22.04
Для настройки подключения потребуется три файла: файл сертификата пользователя, файл ключа сертификата пользователя, файл сертификата ЦС, выпустившего сертификат.
Перенести файлы на компьютер в отдельную папку.
Перейти в раздел "Настройки → Сеть":
Нажать справа от сетевого подключения, откроется окно настройки, перейти во вкладку "Безопасность":
- "Безопасность 8021.1x" - включить
- "Аутентификация" - выбрать "TLS"
- "Подлинность" - указать имя пользователя сертификата (без доменной части)
- "Сертификат пользователя" - выбрать файл сертификат пользователя
- "Сертификат CA" - выбрать файл сертификата ЦС
- "Приватный ключ" - выбрать файл закрытого ключа сертификата пользователя
- "Пароль приватного ключа" - пароль к закрытому ключу
Нажать "Apply".
После выполнения данных действий подключить компьютер к сети у убедиться в возможности авторизации с использованием сертификата.
Приложения
Выпуск сертификатов с использованием OpenSSL
Приведенные примеры команд используют для выпуска сертификатов 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".
Подготовка файлов для выпуска сертификатов сервера и пользователей
Выпуск сертификата для NAICE-RADIUS
Создать файл конфигурации "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