проблемы с SSL_write
От: sergeyli  
Дата: 30.11.12 08:00
Оценка:
Всем привет!

Возникла следующая проблема с OpenSSL. Есть приложение которое используя OpenSSL передает/принимает текстовые месседжи. Проблемы возникаю при отправке мессаджей размером больше 9кб. При отправке, SSL_write возвращает положительное значение, и возвращает управление программе. Так, что получается что месседж отправился. Но вот на сервер оно не приходит. Поэтому вопрос, можно ли как то проконтролировать отправку этого мессаджа? Возможно в OpenSSL есть какие то средства диагностики? А может быть есть, способ анализировать TLS трафик? Для TCP я использую WireShark, но tls к сожалению ей не посмотришь.

Заранее благодарен!
Re: проблемы с SSL_write
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 30.11.12 08:21
Оценка:
Здравствуйте, sergeyli, Вы писали:

S>Всем привет!


S>Возникла следующая проблема с OpenSSL. Есть приложение которое используя OpenSSL передает/принимает текстовые месседжи. Проблемы возникаю при отправке мессаджей размером больше 9кб. При отправке, SSL_write возвращает положительное значение, и возвращает управление программе. Так, что получается что месседж отправился. Но вот на сервер оно не приходит. Поэтому вопрос, можно ли как то проконтролировать отправку этого мессаджа? Возможно в OpenSSL есть какие то средства диагностики? А может быть есть, способ анализировать TLS трафик? Для TCP я использую WireShark, но tls к сожалению ей не посмотришь.

Если ты отправил мессадж, то по любому должен был видеть активность по TCP, а т.к никакого служебного трафика в idle режиме не идёт, то ты можешь гарантированно идентифицировать своё сообщение.
Sic luceat lux!
Re[2]: проблемы с SSL_write
От: sergeyli  
Дата: 30.11.12 09:18
Оценка:
Здравствуйте, Kernan, Вы писали:


K>Если ты отправил мессадж, то по любому должен был видеть активность по TCP, а т.к никакого служебного трафика в idle режиме не идёт, то ты можешь гарантированно идентифицировать своё сообщение.


Проблема в том, что между сервером и клиентом, довольно плотный ТСР трафик. И почти нереально идентифицировать нужное сообщение. Что странно, так то что не отправляется только одно сообщение. А до него и после него месседжи идут нормально.
Re: проблемы с SSL_write
От: Pzz Россия https://github.com/alexpevzner
Дата: 30.11.12 10:15
Оценка:
Здравствуйте, sergeyli, Вы писали:

S>Возникла следующая проблема с OpenSSL. Есть приложение которое используя OpenSSL передает/принимает текстовые месседжи. Проблемы возникаю при отправке мессаджей размером больше 9кб. При отправке, SSL_write возвращает положительное значение, и возвращает управление программе. Так, что получается что месседж отправился. Но вот на сервер оно не приходит. Поэтому вопрос, можно ли как то проконтролировать отправку этого мессаджа? Возможно в OpenSSL есть какие то средства диагностики? А может быть есть, способ анализировать TLS трафик? Для TCP я использую WireShark, но tls к сожалению ей не посмотришь.


А что вы делаете с SSL-соединением после того, как сказали SSL_write()? Пытаетесь получить ответ, или вообще ничего не делаете?
Re[2]: проблемы с SSL_write
От: sergeyli  
Дата: 30.11.12 11:00
Оценка:
Здравствуйте, Pzz, Вы писали:


Pzz>А что вы делаете с SSL-соединением после того, как сказали SSL_write()? Пытаетесь получить ответ, или вообще ничего не делаете?


Я жду, что вернет SSL_write. Если она возвращает положительную величину, то ничего не делаю, если 0 или отрицательную величину то SSL_get_error и там в зависимости от результата. Сейчас вот добавил дополнительные логи, после отправки проблемного мессаджа, SSL_write возвращает верное количество байт, т.е. какой объем в байтах в нее передали, столько она и вернула.
Re[3]: проблемы с SSL_write
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 30.11.12 11:09
Оценка:
Здравствуйте, sergeyli, Вы писали:

S>Проблема в том, что между сервером и клиентом, довольно плотный ТСР трафик. И почти нереально идентифицировать нужное сообщение. Что странно, так то что не отправляется только одно сообщение. А до него и после него месседжи идут нормально.

Э. Фильтр настрой, по ip, по порту, по адресу отправителя.
Sic luceat lux!
Re[4]: проблемы с SSL_write
От: sergeyli  
Дата: 30.11.12 11:21
Оценка: 1 (1)
Здравствуйте, Kernan, Вы писали:

K>Э. Фильтр настрой, по ip, по порту, по адресу отправителя.


Загвоздка в том, что почти все пакеты на клиентской стороне, попадут под этот фильтр. И трафик все равно будет плотный. Проблемный пакет отправляется на стадии инициализации клиента, так что фиг его отфильтруешь.
Re[3]: проблемы с SSL_write
От: Pzz Россия https://github.com/alexpevzner
Дата: 30.11.12 11:27
Оценка:
Здравствуйте, sergeyli, Вы писали:

Pzz>>А что вы делаете с SSL-соединением после того, как сказали SSL_write()? Пытаетесь получить ответ, или вообще ничего не делаете?


S>Я жду, что вернет SSL_write. Если она возвращает положительную величину, то ничего не делаю, если 0 или отрицательную величину то SSL_get_error и там в зависимости от результата. Сейчас вот добавил дополнительные логи, после отправки проблемного мессаджа, SSL_write возвращает верное количество байт, т.е. какой объем в байтах в нее передали, столько она и вернула.


Я думаю, что SSL_write кладет ваши данные в буфер, пытается пропихнуть в сокет, сколько влезет, и на этом успокаивается. Если бы вы после нее позвали SSL_read (или другой SSL_write), то данные, оставшиеся в буфере, дослались бы. Но поскольку вы ничего больше не делаете, они и не досылаются. У OpenSSL нет собственного потока ввода-вывода, он живет на контексте ваших потоков.

Попробуйте пересмотреть ваш способ использования SSL-соединения так, чтобы на нем все время была какая-то активность: либо запись, либо чтение, либо ожидание готовности сокета (если вы используете OpenSSL в неблокирующемся режиме).
Re[4]: проблемы с SSL_write
От: sergeyli  
Дата: 30.11.12 11:40
Оценка:
Здравствуйте, Pzz, Вы писали:


Pzz>Я думаю, что SSL_write кладет ваши данные в буфер, пытается пропихнуть в сокет, сколько влезет, и на этом успокаивается. Если бы вы после нее позвали SSL_read (или другой SSL_write), то данные, оставшиеся в буфере, дослались бы. Но поскольку вы ничего больше не делаете, они и не досылаются. У OpenSSL нет собственного потока ввода-вывода, он живет на контексте ваших потоков.


Pzz>Попробуйте пересмотреть ваш способ использования SSL-соединения так, чтобы на нем все время была какая-то активность: либо запись, либо чтение, либо ожидание готовности сокета (если вы используете OpenSSL в неблокирующемся режиме).


Pzz, спасибо огромное за идею, буду менять алгоритм. Если все получится — отпишусь
Re[5]: проблемы с SSL_write
От: sergeyli  
Дата: 03.12.12 06:58
Оценка:
Пока, ничего не получилось Пытаюсь проверить размер BIO. В доке по OpenSSL написано, что для этого можно использовать:
#define BIO_get_write_buf_size(b,size) (size_t)BIO_ctrl(b,BIO_C_GET_WRITE_BUF_SIZE,size,NULL)


Но вот примера использования этой функции я не нашел. Эта функция должна возвращать размер буфера, на сколько я понял он возвращается в через size_t. Но тогда возникает вопрос, что нужно передавать в функцию в качестве параметра size? Я достаточно долго гуглил, но так и не нашел ответа.

Ps. может кто то знает где можно найти документацию по OpenSSl, потому что на OpenSSL.org она довольно скудная.

Заранее благодарен!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.