URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8535
[ Назад ]

Исходное сообщение
"SSL + мультиплексирование сокетов"

Отправлено GreenHouse , 04-Дек-09 17:44 
Написал приложение клиент/сервер на С++ под Linux, в сервере использую квантование информации и мультиплексирование ввода/вывода. Теперь наконецто задумался о безопасности соединений. Начал розбиратся с SSL и понял, что в ssl не все так просто при использовании функции select. SSL_read работает с полной информацией, тоесть сокет должен быть блокирован и вся идея с Select идёт коту под хвост. Так скажите возможно ли использовать мультиплексирование ssl соединений или нет? Если можно то подилитесь примерчиками кода.

Содержание

Сообщения в этом обсуждении
"SSL + мультиплексирование сокетов "
Отправлено Вова , 04-Дек-09 18:36 
>SSL_read работает с полной информацией, тоесть сокет должен быть блокирован

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


"SSL + мультиплексирование сокетов "
Отправлено GreenHouse , 04-Дек-09 21:23 
>>SSL_read работает с полной информацией, тоесть сокет должен быть блокирован
>
>нет, не должен. всё прекрасно работает на неблокирующих сокетах. Более того, работа
>с ссл на блокирующих сокетах может привести к отказу обслуживания при
>обычном тисипи-коннекте на прослушиваемый порт.

select — опрашивает сетевой буффер, а SSL_write и SSL_read работают с внутренним SSL -буффером. Таким образом результат полученный от select не позволяет однозначно использовать его для вызовов SSL (SSL_write, SSL_read)

Правильно я мыслю ?


"SSL + мультиплексирование сокетов "
Отправлено Вова , 05-Дек-09 10:18 

> select — опрашивает сетевой буффер, а SSL_write и SSL_read работают с
>внутренним SSL -буффером. Таким образом результат полученный от select не позволяет
>однозначно использовать его для вызовов SSL (SSL_write, SSL_read)
>
>Правильно я мыслю ?

Понимание верно, развиваем мысль дальше: так как вполне возможно, что данных, о наличии которых рапортует селект(), будет недостаточно для успешного выполнения алгоритмов ссл, то использование блокирующих сокетов недопустимо; при использовании неблокирующего транспорта SSL_read/write возвращают специальные значения хочу_ещё_читать/хочу_ещё_слать по которым необходимо повторять вызов.


"SSL + мультиплексирование сокетов "
Отправлено GreenHouse , 05-Дек-09 13:04 
>данных о наличии которых рапортует селект(), будет недостаточно для успешного выполнения. >При использовании неблокирующего транспорта SSL_read/write возвращают
>специальные значения хочу_ещё_читать/хочу_ещё_слать по которым необходимо повторять >вызов.

Из выше сказаного я понял, что мы вызываем select(), а потом для каждого активного дескриптора используем вызовы SSL_read/write, а они сами нам говорят о том как прочитали и разшифровали информацию.

Или может отказатся от использования SSL как одного из уровней приложения? Я имею ввиду, что можно используя алгоритмы для асиметричного шифрования(эти алгоритмы взять из OpenSSL) зашифрововать данные, а потом напрямую передавать их через TCP/IP. Чем такой подход хуже чем использования SSL как ещё один уровень?