Идентификатор сеанса в DTLS (OpenSSL) - PullRequest
5 голосов
/ 29 мая 2011

Я пытаюсь реализовать сервер DTLS, используя OpenSSL. Я могу получить данные приложения через, но когда клиент и сервер согласовали, я заметил, что идентификатор_сессии на сервере равен нулю.

При проверке кода, более конкретно ssl_sess.c, session_id_length явно установлен на ноль, комментарии относятся к RFC4507.

У меня вопрос, когда устанавливается соединение, какой идентификатор я могу использовать для уникальной идентификации клиента?

Я заметил, что на стороне клиента идентификатор сеанса, похоже, рассчитывается по заявке, но на сервере этого не происходит.

1 Ответ

4 голосов
/ 29 мая 2011

То же, что и в любом приложении на основе дейтаграмм. По RFC 4347 (защита транспортного уровня дейтаграмм):

Обратите внимание, что в отличие от IPsec, записи DTLS не содержат никакой ассоциации идентификаторы. Заявки должны организовать мультиплекс между ассоциации. С UDP это предположительно сделано с номером хоста / порта.

(Акцент мой)


Из вашего комментария похоже, что вы на самом деле пытаетесь поддерживать состояние между "сессиями" (неопределенный, но, вероятно, применимый дескриптор). Поддержание состояния через «сеансы» является проблемой прикладного уровня. (D) TLS является транспортным уровнем (отсюда и название).

Строго говоря, приложение, работающее на (D) TLS, должно иметь свою собственную концепцию «идентификатора клиента», которая отправляется клиентом на сервер. Есть бесчисленное множество способов справиться с этим, в зависимости от характера вашего приложения и ваших требований безопасности (имя пользователя + пароль, конечно, наиболее распространены).

Другой вариант - использовать сертификаты на стороне клиента в качестве замены независимого идентификатора уровня приложения, но для этого все еще требуется, чтобы уровень приложения понимал происходящее и связывал сертификат клиента с информацией о постоянном состоянии. Досадно, что для этого требуется управление отдельным сертификатом для каждого отдельного клиента. Это достаточно обременительно, что большинство людей не идут по этому пути. Это имеет свои преимущества, например пользователи не могут точно выбрать неверный пароль или записать его на заметку на мониторе. С другой стороны, если кто-то получит доступ к файлу, в котором хранится сертификат, игра все равно закончится.

Конечно, многие книги могут быть (и были с большой частотой) написаны на тему безопасности и аутентификации ...

...