2015-09-27 10 views
1

Мне нужно реализовать TLS на встроенном устройстве с клиентом OpenSSL, работающим на обычном компьютере. Передача данных ограничена менее чем 1 кБ за раз. Я смотрю на mbedtls, и можно ограничить буфер записи до 2 кБ для экономии памяти, однако стандартная запись TLS может достигать 16 кБ. Возможно ли ограничить размер записи в TLS или, по крайней мере, потребовать от каждой команды SSL_write создать свою собственную запись? В противном случае OpenSSL может объединить данные и создать запись, которая слишком длинна для получения. У меня есть полный контроль над обоими концами соединения, поэтому не должно быть проблем с совместимостью.Ограничить размер записи в OpenSSL

+0

Из [BIO_f_buffer (3) '' человек страницы] (https://www.openssl.org/docs/manmaster/crypto/BIO_f_buffer.html): * "BIO_set_read_buffer_size(), BIO_set_write_buffer_size() и BIO_set_buffer_size() return 1, если буфер был успешно изменен или 0 для отказа "и *" ... начальный размер буфера равен 'DEFAULT_BUFFER_SIZE', в настоящее время 4096. Любые попытки уменьшить размер буфера ниже' DEFAULT_BUFFER_SIZE' игнорируются. "* – jww

ответ

1

Попробуйте BIO_set_write_buffer_size(), но вы должны просто контролировать, сколько вы читаете или отправляете за раз, и очищайте BIO после каждой записи.

Другой стратегией может быть создание памяти BIO и передача байтов вывода, который она производит. Вы не можете контролировать максимальный размер своего буфера, но вы должны иметь возможность контролировать размер куска вручную таким образом.

+0

Использование' BIO_set_write_buffer_size' может быть сложным. В соответствии с ['BIO_f_buffer (3)' man page] (https://www.openssl.org/docs/manmaster/crypto/BIO_f_buffer.html): * "... Начальный размер буфера DEFAULT_BUFFER_SIZE, в настоящее время 4096. Любая попытка уменьшить размер буфера ниже DEFAULT_BUFFER_SIZE игнорируется. * * Поэтому ему может потребоваться изменить «DEFAULT_BUFFER_SIZE». – jww

+1

Без проверки, для меня это похоже на константу времени компиляции, поэтому, вероятно, потребуется перекомпилировать библиотеку и выполнить тесты регрессии. Может быть и другой код, который делает предположения об этом, так как это также размер страницы. – Davislor

+0

Да, я жду, чтобы увидеть результат. Мы можем отправить отчет об ошибке, ссылаясь на это, и еще несколько вопросов о SO, если OpenSSL действительно нуждается в перекомпиляции. (Я рассматриваю SO как источник реальных проблем, которые могут быть решены). – jww