Повышение производительности рукопожатия SSL - PullRequest
4 голосов
/ 22 ноября 2010

У меня недолговечный клиентский процесс, который общается с сервером по SSL. Процесс вызывается часто и выполняется только в течение короткого времени (обычно менее 1 секунды). Этот процесс предназначен для использования в качестве части сценария оболочки, используемого для выполнения более крупных задач, и может вызываться довольно часто.

SSL-квитирование, которое он выполняет при каждом запуске, в моих тестах оказывается существенным узким местом производительности, и я хотел бы уменьшить его, если это возможно.

Одна вещь, которая приходит в голову, это взять идентификатор сессии и сохранить его где-то (вроде печенья), а затем повторно использовать это при следующем вызове, однако это заставляет меня чувствовать себя неловко, так как я думаю, что будет некоторые проблемы безопасности вокруг этого.

Итак, у меня есть пара вопросов,

  1. Это плохая идея?
  2. Возможно ли это даже с помощью OpenSSL?
  3. Существуют ли более эффективные способы ускорения процесса установления связи SSL?

Ответы [ 4 ]

3 голосов
/ 22 ноября 2010

Вы должны иметь возможность безопасно использовать кэш сеанса (который поддерживает OpenSSL), см. Документацию по SSL_CTX_set_session_cache_mode , SSL_set_session и SSL_session_reused для получения дополнительной информациикак это достигается.

3 голосов
/ 23 ноября 2010

После рукопожатия вы можете получить информацию о сеансе SSL из вашего соединения с помощью SSL_get_session().Затем вы можете использовать i2d_SSL_SESSION() для сериализации в форму, которая может быть записана на диск.

Когда вы в следующий раз захотите подключиться к тому же серверу, вы можете загрузить информацию о сеансе с диска, а затем снять сериализациюd2i_SSL_SESSION() и используйте SSL_set_session() для его установки (до SSL_connect()).

Сеанс SSL на диске должен быть доступен для чтения только пользователю, под которым запускается инструмент, а устаревшие сеансы должны быть перезаписаны.и часто удаляется.

2 голосов
/ 24 ноября 2010

Интересно, что я столкнулся с проблемой рукопожатий OpenSSL только сегодня. Реализация RAND_poll в Windows использует API-интерфейсы кучи Windows в качестве источника случайной энтропии.

К сожалению, из-за «исправления ошибок» в Windows 7 (и Server 2008) API-интерфейсы перечисления кучи (которые в конечном итоге отлаживают API-интерфейсы) теперь могут занимать секунду на вызов, когда куча заполнена выделениями. Это означает, что подключение и прием SSL могут занять от 1 секунды до нескольких минут.

Билет содержит несколько хороших советов о том, как исправить патч openssl для достижения более быстрых рукопожатий на FAR.

2 голосов
/ 22 ноября 2010

Не могли бы вы, возможно, использовать постоянное соединение, чтобы установка была единовременной?

Вы могли бы абстрагировать логику соединения, чтобы ваш клиентский код все еще считал выполнением соединения/ процесс / отключить цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...