Написал приложение клиент/сервер на С++ под Linux, в сервере использую квантование информации и мультиплексирование ввода/вывода. Теперь наконецто задумался о безопасности соединений. Начал розбиратся с SSL и понял, что в ssl не все так просто при использовании функции select. SSL_read работает с полной информацией, тоесть сокет должен быть блокирован и вся идея с Select идёт коту под хвост. Так скажите возможно ли использовать мультиплексирование ssl соединений или нет? Если можно то подилитесь примерчиками кода.
>SSL_read работает с полной информацией, тоесть сокет должен быть блокированнет, не должен. всё прекрасно работает на неблокирующих сокетах. Более того, работа с ссл на блокирующих сокетах может привести к отказу обслуживания при обычном тисипи-коннекте на прослушиваемый порт.
>>SSL_read работает с полной информацией, тоесть сокет должен быть блокирован
>
>нет, не должен. всё прекрасно работает на неблокирующих сокетах. Более того, работа
>с ссл на блокирующих сокетах может привести к отказу обслуживания при
>обычном тисипи-коннекте на прослушиваемый порт.select — опрашивает сетевой буффер, а SSL_write и SSL_read работают с внутренним SSL -буффером. Таким образом результат полученный от select не позволяет однозначно использовать его для вызовов SSL (SSL_write, SSL_read)
Правильно я мыслю ?
> select — опрашивает сетевой буффер, а SSL_write и SSL_read работают с
>внутренним SSL -буффером. Таким образом результат полученный от select не позволяет
>однозначно использовать его для вызовов SSL (SSL_write, SSL_read)
>
>Правильно я мыслю ?Понимание верно, развиваем мысль дальше: так как вполне возможно, что данных, о наличии которых рапортует селект(), будет недостаточно для успешного выполнения алгоритмов ссл, то использование блокирующих сокетов недопустимо; при использовании неблокирующего транспорта SSL_read/write возвращают специальные значения хочу_ещё_читать/хочу_ещё_слать по которым необходимо повторять вызов.
>данных о наличии которых рапортует селект(), будет недостаточно для успешного выполнения. >При использовании неблокирующего транспорта SSL_read/write возвращают
>специальные значения хочу_ещё_читать/хочу_ещё_слать по которым необходимо повторять >вызов.Из выше сказаного я понял, что мы вызываем select(), а потом для каждого активного дескриптора используем вызовы SSL_read/write, а они сами нам говорят о том как прочитали и разшифровали информацию.
Или может отказатся от использования SSL как одного из уровней приложения? Я имею ввиду, что можно используя алгоритмы для асиметричного шифрования(эти алгоритмы взять из OpenSSL) зашифрововать данные, а потом напрямую передавать их через TCP/IP. Чем такой подход хуже чем использования SSL как ещё один уровень?