Freeradius и неожиданная версия TLS -> Access-Reject - PullRequest
0 голосов
/ 17 февраля 2020

каждый!

У меня странная проблема с freeradius 3.0.16.

Я пытаюсь реализовать обмен аутентификацией с RADIUS, запрашивая EAP-TLS. На данный момент мне нужно только перейти к фазе, когда сервер отвечает Access-Challenge с сертификатом сервера (таким образом, 2 пакета от NAD и 2 от сервера). Для генерации пакетов на стороне NAD я использую python3 со scapy.

Freeradius был настроен на использование EAP-TLS для аутентификации тестового пользователя. На первый запрос доступа со стороны NAD отвечает Access-Challenge с сервера. Пока все хорошо.

Но когда я отправляю второй пакет, я получаю Access-Reject. Удивительно, но сервер сообщает, что я использую неподдерживаемую версию TLS ? 0304? (что соответствует TLS1.3). Почему "удивительно"? Ну, потому что я использую более раннюю версию TLS, и она хорошо видна даже в отладках сервера (если вы проверите часть «eap message», где «0301» , что соответствует TLS1.1).

Я также проверил в Wireshark (перехвачен как на сервере, так и на машине "NAD") - пакет правильно рассечен последним wireshark и имеет TLS1.1 внутри.

Кэширование отключено (и в любом случае , это тестовый сервер, и я не пытался отправить TLS 1.3, поэтому у TLS 1.3 нет шансов каким-либо образом попасть в кеш).

OpenSSL уже находится в новейшей версии (1.1.1-1ubuntu2.1) ~ 18.04.5).

Что здесь может быть не так?

Где мне продолжить отладку?

Для ссылка, вот отладка от freeradius (собрана с помощью freeradius -X, я выделил части, упомянутые выше):

Готов обработать запросы

(0) Получен Access-Request Id 200 от 192.168.0.14:53256 до 192.168.0.59:1812 длина 67 (0) Service-Type = Fra med-User (0) User-Name = "test" (0) Framed-MTU = 1500 (0) EAP-Message = 0x020500090174657374 (0) Message-Authenticator = 0xefe697c97fd0118935d39e9a25d6baff (0) # Выполнение раздела авторизации из файла / etc / freeradi /3.0/sites-enabled/default (0) авторизовать {(0) policy filter_username {(0) if (& User-Name) {(0)
if (& User-Name) -> TRUE (0) if (& User -Name) {(0) if (& Имя пользователя = ~ / /) {(0) if (& Имя пользователя = ~ / /) -> ЛОЖЬ (0) if (& Имя пользователя = ~ / @ [^ @] @ /) {(0) if (& Имя пользователя = ~ / @ [^ @] @ /) -> ЛОЖЬ (0) if (& Имя пользователя = ~ /../) {(0 )
if (& Имя пользователя = ~ /../) -> ЛОЖЬ (0) if ((& Имя пользователя = ~ / @ /) && (& Имя пользователя! ~ / @ (. +). (. +) $ /)) {(0) if ((& Имя пользователя = ~ / @ /) && (& Имя пользователя! ~ /@(.+).(.+)$/)) -> ЛОЖЬ (0) if (& User-Name = ~ /.$/) {(0) if (& User-Name = ~ /.$/) -> FALSE (0) if (& User-Name = ~ /@./) {(0) if (& User-Name = ~ /@./) -> FALSE (0)} # if (& User-Name) = notfound (0)} # policy filter_username = notfound (0)
[preprocess] = ok (0 ) auth_log: EXPAND / var / log / fr eeradius / radacct /% {% {Packet-Sr c -IP-Address}: -% {Packet-Sr c -IPv6-Address}} / auth-detail-% Y% m% d (0) auth_log : -> /var/log/freeradius/radacct/192.168.0.14/auth-detail-20200214 (0) auth_log: / var / log / freeradius / radacct /% {% {Packet-Sr c -IP-Address }: -% {Packet-Sr c -IPv6-Address}} / auth-detail-% Y% m% d расширяется до /var/log/freeradius/radacct/192.168.0.14/auth-detail-20200214 (0 ) auth_log: EXPAND% t (0) auth_log: -> пт 14 февраля 15:03:01 2020 (0) [auth_log] = ok (0) [digest] = n oop (0) суффикс: проверка суффикса после суффикса "@" (0): "@" в User-Name = "test" отсутствует, поиск суффикса NULL (0) для области: нет такой области "NULL" (0) [суффикс] = noop (0) eap: Одноранговый отправленный ответ EAP (код 2) ID 5 длина 9 (0) eap: ответ EAP-Identity, возвращающий 'ok', чтобы мы могли замкнуть остальную часть authorize (0) [eap] = ok (0)} # authorize = ok (0) Найдено Auth-Type = eap (0) # Выполнение группы из файла /etc/freeradius/3.0/sites-enabled/default (0) authenticate {(0) eap: равноправный отправленный пакет с методом EAP Identity (1) (0) eap: вызов подмодуля eap_tls для обработки данных (0) eap_tls: запуск нового сеанса EAP-TLS (0) eap_tls: настройка режима проверки для запроса сертификата от клиента (0) eap_tls: [начало eaptls] = запрос (0) eap: отправка запроса EAP (код 1) ID 6 длина 6 (0) eap: добавление сеанса EAP и ответ: состояние = 0xe879495de87f44cf (0) [eap] = обработано (0)} # authenticate = handled (0) Использование проверки типа после аутентификации (0) # Выполнение группы из файла /etc/freeradius/3.0/sites-enabled/default (0) Challenge {...} # пустой подраздел игнорируется ( 0) Отправленный Access-Challenge Id 200 с 192.168.0.59:1812 до 192.168.0.14:53256 длина 0 (0) EAP-сообщение = 0x010600060d20 (0)
Аутентификатор сообщения = 0x00000000000000000000000000000000 (0) State = 0xe855ff9ffc9ffc9ffc9ffcf5cf5cf5cf5cf5cf5cf5cf5cf5cf5cf5df Завершенный запрос Просыпается за 4,9 секунды.

(1) Полученный идентификатор запроса доступа 201 с 192.168.0.14:53256 по 192.168.0.59:1812 длина 163 (1) Service-Type = Framed-User (1) User-Name = "тест" (1) Framed-MTU = 1500 (1) EAP-Message = 0x020600570d800000004d16 *0301* 00480100004403015e43c51b0000000000000000000000000000000000000000000000000000000000001600040005000a0009006400620003000600130012006301000005ff01000100 (1) State = 0xe879495de87f44cfa950f055cfc4b84d (1)
Message-Authenticator = 0x70eca9c059289b575655c08683064d67 (1) состояние сеанса: нет кэшированных атрибутов (1) # Выполнить авторизацию раздела из файла /etc/freeradius/3.0/sites-enabled/default (1) authorize {(1) policy filter_username {(1) if (& User-Name ) {(1)
if (& Имя пользователя) -> ИСТИНА (1) if (& Имя пользователя) {(1) if (& Имя пользователя = ~ / /) {(1) if (& Имя пользователя = ~ / /) -> FALSE (1) if (& Имя пользователя = ~ / @ [^ @] @ /) {(1) if (& Имя пользователя = ~ / @ [^ @] @ /) -> ЛОЖЬ (1) if (& Имя пользователя = ~ /../) {(1)
if (& Имя пользователя = ~ /../) -> ЛОЖЬ (1) if ((& Пользователь- Имя = ~ / @ /) && (& Имя пользователя! ~ /@(.+).(.+)$/)) {(1) if ((& Имя пользователя = ~ / @ /) && (& Имя пользователя ! ~ /@(.+).(.+)$/)) -> FALSE (1) if (& User-Name = ~ /.$/) {(1) if (& Имя пользователя = ~ /.$/) -> ЛОЖЬ (1) if (& Имя пользователя = ~ /@./) {(1) if (& Имя пользователя = ~ /@./) -> FALSE (1)} # if (& Имя пользователя) = notfound (1)} # policy filter_username = notfound (1)
[preprocess] = ok (1) auth_log: EXPAND / var / log / freeradius / radacct /% {% {Packet-Sr c -IP-Address}: -% {Packet-Sr c -IPv6-Address}} / auth-detail-% Y% m% d (1 ) auth_log: -> /var/log/freeradius/radacct/192.168.0.14/auth-detail-20200214 (1) auth_log: / var / log / freeradius / radacct /% {% {Packet-Sr c -IP -Адрес}: -% {Packet-Sr c -IPv6-Address}} / auth-detail-% Y% m% d расширяется до /var/log/freeradius/radacct/192.168.0.14/auth-detail-20200214 (1) auth_log: EXPAND% t (1) auth_log: -> пт 14 февраля 15:03:01 2020 (1) [auth_log] = ok (1) [digest] = n oop (1) суффикс: проверка для суффикса после суффикса «@» (1): «@» в User-Name = «test» отсутствует, поиск суффикса NULL (1): нет такой области «NULL» (1) [суффикс] = noop (1) eap: равноправный отправленный ответ EAP (код 2) ID 6 длина 87 (1) eap: нет запуска EAP, при условии, что это идет разговор EAP (1) [eap] = updated (1)} # authorize = updated (1) Найдено Auth-Type = eap (1) # Выполнение группы из файла /etc/freeradius/3.0/sites-enabled/default (1) ) authenticate {(1) eap: истекающий сеанс EAP с состоянием 0xe879495de87f44cf (1) eap: завершенный сеанс EAP с состоянием 0xe879495de87f44cf (1) eap: найден предыдущий запрос EAP для состояния 0xe879495de87f44cf, освобожден из списка (1) отправленный пакет: равноправный пакет с помощью метода EAP TLS (13) (1) eap: вызов субмодуля eap_tls для обработки данных (1) eap_tls: продолжение EAP-TLS (1) eap_tls: одноранговый узел указал, что полный размер записи TLS составит 77 байт (1) eap_tls: получен полный TLS запись (77 байт) (1) eap_tls: [проверка eaptls] = длина включена (1) eap_tls: (другое): до инициализации SSL (1) eap_tls: TLS_accept: до инициализации SSL (1) eap_tls: TLS_accept: до инициализации SSL (1) eap_tls: <<< recv UNKNOWN TLS VERSION <em>? 0304? [длина 0048] (1) eap_tls: >>> отправка оповещения TLS 1.0 [длина 0002], фатальная handshake_failure (1) eap_tls: ОШИБКА: запись оповещения TLS: fatal: сбой рукопожатия tls: TLS_accept : Ошибка в ошибке (1) eap_tls: ОШИБКА: ошибка в FUNCTION (SSL_read): ошибка: 1417A0C1: подпрограммы SSL: tls_post_process_client_hello: нет общего шифра (1) eap_tls: ERROR: системный вызов (I / O) ошибка (-1) (1) eap_tls: ОШИБКА: сбой квитирования получения TLS во время операции (1) eap_tls: ОШИБКА: [процесс eaptls] = сбой (1) eap: ОШИБКА: не удалось продолжить сеанс EAP TLS (13). Сбой подмодуля EAP (1) eap: сбой отправки EAP (код 4) ID 6 длина 4 (1) eap: сбой в EAP select (1) [eap] = неверный (1)} # authenticate = неверный (1) Failed аутентификация пользователя (1) Использование отклонения после аутентификации

Заранее огромное спасибо за любые подсказки!

...