У меня есть приложение Java, которое устанавливает SSL-соединение с удаленным сервером.
Когда я запускаю приложение со своей машины разработки (который географически ближе к удаленному серверу, в другой сети и работает под управлением Win7) соединение занимает менее секунды.
Когда я запускаю приложение с производственной машины (Солярис) SSL-соединение занимает более 10 секунд.
Я хотел бы понять, что я могу сделать, чтобы ускорить это время подключения.
Я включил трассировку отладки (с расширенным потоком печати, который регистрирует прошедшее время):
-Djavax.net.debug = все
Я вижу, что большая часть потерянного времени происходит после того, как клиент завершил спецификацию шифра изменения клиента, между записью и чтением.
<Elapsed [4249]ms> *** Finished
<Elapsed [4251]ms> ***
<Elapsed [4251]ms> [write] MD5 and SHA1 hashes: len = 16
<Elapsed [4254]ms> Padded plaintext before ENCRYPTION: len = 48
<Elapsed [4258]ms> main, WRITE: TLSv1 Handshake, length = 48
<Elapsed [11230]ms> main, READ: TLSv1 Change Cipher Spec, length = 1
<Elapsed [11231]ms> JsseJce: Using cipher AES/CBC/NoPadding from provider SunJCE
<Elapsed [11360]ms> main, READ: TLSv1 Handshake, length = 48
<Elapsed [11360]ms> Padded plaintext after DECRYPTION: len = 48
<Elapsed [11364]ms> *** Finished
Какие варианты можно рассмотреть, чтобы ускорить рукопожатие?
-
Ссылки:
В этой статье подробно описывается SSL-рукопожатие - прокрутите вниз до раздела SSL-протокол, в котором есть диаграмма и примечания, объясняющие 15-шаговый процесс рукопожатия:
http://docs.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#SSLOverview
В этой статье для справки описывается процедура установления связи SSL с отладочными сообщениями:
http://docs.oracle.com/javase/1.5.0/docs/guide/security/jsse/ReadDebug.html
-- Редактировать
Тестирование на другой машине внутри проблемной сети показало интересные результаты. Первые 10 шагов SSL-подтверждения произошли в два раза быстрее, но задержка записи во время «завершенной» фазы заняла 80% от общего прошедшего времени подтверждения.
<Elapsed [1816]ms> main, WRITE: TLSv1 Handshake, length = 48
<Elapsed [10078]ms> main, READ: TLSv1 Change Cipher Spec, length = 1
Вы пробовали подключиться с другого компьютера к тому же сайту, все еще так медленно? Удаленная машина тоже Solaris?
Я бы посоветовал попробовать обновить JVM, если вы можете сначала протестировать на идентичной машине.
Для обратного DNS должно быть достаточно записи в / etc / hosts.
Какая модель и версия ОС у машины Solaris? У некоторых есть крипто-чипы, которые вы можете попробовать и посмотреть, включен он или нет.
Причиной этого конкретного экземпляра этой проблемы был сбой обратного поиска DNS на сервере.
Это было вызвано изменением DNS-серверов имен на стороне клиента, которые не были обнаружены на стороне сервера.
Эту проблему удалось изолировать с помощью Wireshark как на клиентских, так и на серверных машинах, и ее можно было подтвердить с помощью: dig
dig @namserverURL -x serverIP +trace
После того, как проблемы с DNS были решены, скорость установления связи SSL была значительно увеличена.