Вопрос или проблема
Я использую freeradius для тестирования EAP-TLS. Авторизация проходит успешно только в том случае, если я указываю идентичность. Она даже не должна соответствовать каким-либо полям в клиентском сертификате. Почему это требуется, если у меня есть сертификат и закрытый ключ? Я знаю, что протокол EAP имеет сообщение-ответ, которое должно содержать строку идентичности. Существует ли конфигурация, при которой AS принимает пустое поле?
Моя система:
- Точка доступа (NAS): Openwrt с HostAP
- AS: freeradius
- Клиент: wpa_supplicant
Ответ EAP-Identity обычно содержит имя пользователя или какой-либо идентификатор, который может использоваться AS для упрощения процесса аутентификации.
Вы можете установить идентичность по умолчанию в конфигурационном файле eap, который обычно находится по пути /etc/freeradius/номер версии/mods-enabled/eap. Найдите раздел tls и добавьте следующую строку: identity = "default"
Замените “default” на идентичность по умолчанию, которую вы хотите использовать, когда клиент предоставляет пустую идентичность.
ИЛИ
Вы можете настроить прием анонимных идентичностей, изменив конфигурационные файлы ‘sites-enabled/default’ или ‘sites-enabled/inner-tunnel’. Найдите раздел authorize и измените условие if, проверяющее имя пользователя, на что-то вроде:
if (User-Name == "anonymous" || User-Name == "") {
update control {
Cleartext-Password := "<некоторая-случайная-строка>"
}
update request {
Stripped-User-Name := "anonymous"
Realm := "NULL"
}
}
Ответ или решение
EAP-TLS использует клиентские сертификаты для аутентификации, но при этом, согласно протоколу EAP, требуется предоставление идентификатора. Это связано с тем, что идентификатор необходим для управления сессиями и может быть использован сервером аутентификации (AS) для установки конкретного контекста или пользователя.
Ваша проблема заключается в том, что сервер FreeRADIUS не принимает пустое значение для идентификатора, даже если у клиента есть сертификат и закрытый ключ. Вот несколько шагов и конфигураций, которые могут помочь вам в решении этой проблемы:
-
Определение идентификатора по умолчанию:
Вы можете установить идентификатор по умолчанию в конфигурационном файле EAP. Обычно этот файл находится по пути/etc/freeradius/<номер версии>/mods-enabled/eap
. Найдите разделtls
и добавьте следующую строку:identity = "default"
Замените "default" на идентификатор, который вы хотите использовать, если клиент предоставляет пустое значение. Это позволит вам избежать ошибки, связанной с отсутствием идентификатора.
-
Настройка анонимного идентификатора:
Если вы хотите принимать анонимные идентификаторы, вам нужно изменить конфигурацию в файлахsites-enabled/default
илиsites-enabled/inner-tunnel
. Найдите секциюauthorize
и измените условие, которое проверяет имя пользователя, на что-то вроде:if (User-Name == "anonymous" || User-Name == "") { update control { Cleartext-Password := "<some-random-string>" } update request { Stripped-User-Name := "anonymous" Realm := "NULL" } }
Это позволит серверу принимать пустой идентификатор, присваивая анонимному пользователю определенное имя, что упростит аутентификацию.
-
Проверка конфигурации wpa_supplicant:
Убедитесь, что в конфигурации вашего supplicant (wpa_supplicant) также правильно указаны параметры идентификации. Возможно, стоит явно указать используемую идентификацию, если по каким-то причинам она не передается. -
Тестирование и отладка:
После внесения изменений проверьте логи FreeRADIUS, чтобы убедиться, что аутентификация проходит успешно и идентификатор обрабатывается правильно. Также вы можете использовать инструменты для отладки, такие какradtest
, для тестирования ваших настроек.
Следуя этим шагам, вы сможете настроить FreeRADIUS для работы с EAP-TLS без необходимости предоставления идентификатора.