Как принудительно включить TLS 1.3 в FreeRADIUS?

Я пытаюсь поэкспериментировать с TLS 1.3.

У меня есть настройка ЦС, серверные и клиентские сертификаты, сгенерированные и распределенные, и я могу успешно подключиться, используя эти сертификаты с openssl s_server и s_client:

TLS 1.2:

...
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: FFE0AFA10151E6E6F836F84E35D3D84F61F1811DD29B3E5F72F322A5E2529600
    Session-ID-ctx: 
...
    Start Time: 1669758448
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: yes
---

TLS 1.3:

---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: F23B37793041E458A77B180FED47B43DF02378C4A25F505A6C4942C5A195EF4E
    Session-ID-ctx: 
...
    Start Time: 1669758331
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---

Хорошо, круто, значит, OpenSSL работает на RADIUS/EAP-TLS.

Это те же самые сертификаты, которые я использую для сервера RADIUS и для аутентификации EAP-TLS. В файле eap.conf у меня есть:

...
        tls_min_version = "1.2"
        tls_max_version = "1.2"
...

и все работает нормально. Если я установлю для max_version только значение 1.3, это все равно будет успешным, но когда я установлю для минимальной и максимальной версии значение 1.3, рукопожатие завершится неудачно, и клиент будет отклонен. Я просмотрел отладочные сообщения и заметил кое-что конкретно в этом отрывке:

(1) Found Auth-Type = eap
(1) # Executing group from file /etc/freeradius/3.0/sites-enabled/default
(1)   authenticate {
(1) eap: Expiring EAP session with state 0x1d55cef11de3c377
(1) eap: Finished EAP session with state 0x1d55cef11de3c377
(1) eap: Previous EAP request found for state 0x1d55cef11de3c377, released from the list
(1) eap: Peer sent packet with method EAP TLS (13)
(1) eap: Calling submodule eap_tls to process data
(1) eap_tls: (TLS) EAP Got final fragment (184 bytes)
(1) eap_tls: WARNING: (TLS) EAP Total received record fragments (184 bytes), does not equal expected expected data length (0 bytes)
(1) eap_tls: (TLS) EAP Done initial handshake
(1) eap_tls: (TLS) Handshake state - before SSL initialization
(1) eap_tls: (TLS) Handshake state - Server before SSL initialization
(1) eap_tls: (TLS) Handshake state - Server before SSL initialization
(1) eap_tls: (TLS) recv TLS 1.3 Handshake, ClientHello
(1) eap_tls: (TLS) send TLS 1.2 Alert, fatal protocol_version
(1) eap_tls: ERROR: (TLS) Alert write:fatal:protocol version
(1) eap_tls: ERROR: (TLS) Server : Error in error
(1) eap_tls: ERROR: (TLS) Failed reading from OpenSSL: error:0A000102:SSL routines::unsupported protocol
(1) eap_tls: ERROR: (TLS) System call (I/O) error (-1)
(1) eap_tls: ERROR: (TLS) EAP Receive handshake failed during operation
(1) eap_tls: ERROR: [eaptls process] = fail
(1) eap: ERROR: Failed continuing EAP TLS (13) session.  EAP sub-module failed
(1) eap: Sending EAP Failure (code 4) ID 182 length 4
(1) eap: Failed in EAP select
(1)     [eap] = invalid
(1)   } # authenticate = invalid
(1) Failed to authenticate the user
(1) Using Post-Auth-Type Reject

В частности, из этих двух строк:

(1) eap_tls: (TLS) recv TLS 1.3 Рукопожатие, ClientHello
(1) eap_tls: (TLS) отправить предупреждение TLS 1.2, фатальная версия_протокола

Похоже, что клиент отправляет рукопожатие TLS 1.3 в Client Hello, но сервер возвращается к TLS 1.2 и дает сбой.

Чего мне не хватает, чтобы принудительно использовать TLS 1.3 со стороны сервера? У меня сложилось впечатление, что достаточно просто установить tls_min_version и tls_max_version в файле eap.conf, чтобы изменить версию TLS, используемую на стороне сервера.

Документы freeradius дают очень ограниченную информацию о EAP-TLS 1.3 и не так ясны ни в чем, кроме того факта, что он, вероятно, не будет работать. Даже если это не сработает, мне интересно посмотреть, что произойдет, но у меня есть некоторые проблемы с этой частью.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
324
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В конце концов разобрался с этим.

Несмотря на то, что эти выходные данные отладки и сообщения об ошибках в значительной степени предполагают обратное, как уже некоторое время указывали ребята из FreeRADIUS, это проблема на стороне клиента.

Другие вопросы по теме