LINUX.ORG.RU

А какой перформанс у TLS рукопожатия?

 , , ,


1

2

Сгенерил RSA пару на 2048 битов через keytool. Взял SSLEngine и запустил клиент-сервер на 10-ой джаве на обычном ноутбуке с последним i5. По итогу на рукопожатие уходит 200 мс - это нормально? У сервера первая SSLEngine#getDelegatedTask() таска отрабатывает где-то за 80-100 мс. У клиента примерно также. Но там еще есть вторая таска, по итогу 200 мс на рукопожатие... Мне кажется что-то тут не так?

Посмотрел на джава опции есть какой-то -XX:+UseAESIntrinsics, оно есть в OpenJDK или это только оракловский хотспот?

★★★★★

Последнее исправление: foror (всего исправлений: 1)

можешь сравнить с openssl s_client и s_server

Harald ★★★★★
()

Ничего не знаю пока по сабжу, но по коду есть куча вхождений этого флага, что в С2, что в Граале.

Видно что на powerpc, arm32, arm64 он не работает (должны быть ворнинги). На x86, x86_64, спарке, s390 (IBM System Z?) - работают.

Но на x86_* нужно в процессоре SSE 4.2 и выше.

stevejobs ★★★★☆
()

ради интереса запустил

time openssl s_client -connect ближайшийХТТПСсервервинтернете:443 < /dev/null

выдало 18 миллисекунд при 2048битном ключе

и это даже не на локалхосте, настраивать влом было

Harald ★★★★★
()
Ответ на: комментарий от stevejobs

Да стало лучше, теперь на первую таску SSLEngine сервер тратит 12 мс. Точнее при первом клиенте 100, при втором 24, а на третьем 12 и последюущие клиенты не опускают эту планку. Может какой разогрев JVM произошел или rngd помогло, уже плохо соображаю )

foror ★★★★★
() автор топика
Ответ на: комментарий от Harald

У меня выдало 37 мс на сайте провайдера с пингом 1.5 мс.

foror ★★★★★
() автор топика
Ответ на: комментарий от foror

предположение в том, что если в системе закончится энтропия, то ей станет плохо. Вроде для этого какие-то даже серверы пишут, сейчас не вспомню. Но rgnd уже должен помочь.

JVM же не сохраняет состояния между перезапусками. Перезапусти JVM, если будет все так же хорошо - значит виноват не прогрев

уменьшить количество вызовов методов перед тем, когда начнется JIT-компиляция, можно с помощью -XX:CompileThreshold=1 (меньше - не значит лучше, с единицей стартап перфоманс будет ужасен)

то что первые несколько клиентов тормозят - это нормально, добро пожаловать в жабу =)

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Видимо это разогрев JVM, на сервере перформанс резко возрастает до ~18 мс после 3-4 клиента. А вот клиенты всегда показывают ~90 мс на первой таске SSLEngine. Не знаю почему это сразу не заметил, видимо мозг перегружен уже - пойду спать )

foror ★★★★★
() автор топика
Последнее исправление: foror (всего исправлений: 1)

у RSA в принципе хреновая производительность, поэтому в TLS придумали тикет сессии.

sergej ★★★★★
()

AES начинается уже после рукопожатия. Посмотрел бы варинты обмена ключами. Этих ваших диффи хелманов бывает много разных.

redixin ★★★★
()
Ответ на: комментарий от redixin

Я в настройках ничего не менял, видимо всё по дефолту идёт. Собственно затем и создал тему, может кто какие настройки поинтереснее подкинет. Пока только такое нашел https://groups.google.com/forum/#!topic/netty/wzGNk37rr3U

foror ★★★★★
() автор топика

Посмотрел свой набор шифров TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 Не слишком круто? Может по меньше битов сделать?

Смотрю даже у гугла ECDHE-RSA-AES128-GCM-SHA256

foror ★★★★★
() автор топика
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от foror

Ну опять же битность аес это то что начинается после хендшейка. Рса он не очень быстрый, мож кривые попробовать стоит для разнообразия.

redixin ★★★★
()
Ответ на: комментарий от redixin

Также, у клиента проблема из-за отсутствия разогрева JVM. А сервер со временем разогревается. И поставив набор шифров как у Гугла, на стороне сервера удалось до 7 мс снизить обработку первой таски SSLEngine.

Над клиентом потом по колдую, пока все устраивает.

foror ★★★★★
() автор топика
Последнее исправление: foror (всего исправлений: 1)
Ответ на: комментарий от Harald

Ахаха, ваш Си просто эталон безопасности. Раз в год обязательно порадует эпичным эпик фейлом, раз в месяц по забавному CVE.

foror ★★★★★
() автор топика
Ответ на: комментарий от foror

А у тебя какая операционная система, где клиент?

Если Linux x86_64, то можно попробовать AOT на Граале. Возможно, там прогрева будет не нужно.

Причем аот - штука опциональная, можно его включать только для линукса, а на остальных платформах отключать, переписывать код это не заставит

Но ты не можешь использовать в аоте lambda expressions, и есть ещё какие-то ограничения (я в точности не в курсе, потому что не использую на практике)

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от stevejobs

А я помню, что где-то видел аргумент для JVM, который позволяет задать методы, которые необходимо сразу скомпилировать. Точно помню, что-то подобное находил.

foror ★★★★★
() автор топика
Ответ на: комментарий от foror

А я помню, что где-то видел аргумент для JVM, который позволяет задать методы, которые необходимо сразу скомпилировать.

Задать методы нет, а вот компилировать сразу при входе в метод, это пожалуйста. «java -Xcomp», и пусть весь мир подождёт. Профиль потеряется тоже, так что скомпилирует хуже наверняка.

anonymous
()

Рукопожатие всегда самая медленная стадия, с этим борются с помощью кэша сессий

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.