Совершая платеж в Интернет-магазине или ином финансовом сервисе, ты наверняка инициируешь SSL-соединение где-то на серверной стороне с участием какого-нибудь Java-приложения. А теперь представь: что, если тебе нужно исследовать это соединение? В силу бизнес-ценности его нельзя сделать открытым даже в тестовом окружении. Устроить MITM с помощью Fiddler’а не даст привязка к настоящим сертификатам, и даже если ты раздобудешь приватный ключ сервера, успех не гарантирован. Тупик? Оказывается, нет! Трафик такого приложения можно расшифровать, если у тебя есть его перехват Wireshark’ом и… логи JVM.

 

Теория

Чтобы ухватить суть этого концепта, удели пару минут постижению его основ. Здесь будет рассказано, откуда и зачем берутся отладочные записи JVM, что такое сессионные ключи SSL и как все это смешать в Wireshark’е так, чтобы вскрыть зашифрованный трафик. Если какие-то из этих пунктов тебе уже известны, смело забивай на них и переходи дальше. Единственное, о чем здесь не пойдет речь, это как пользоваться Wireshark’ом – наверняка ты и сам можешь научить этому кого угодно.

 

Отладочные записи JVM

Ни для кого не секрет, что настройка и отладка защищенных соединений – задача отнюдь не тривиальная. Об этом догадывались и разработчики расширения JSSE для Java (реализация SSL/TLS), и поэтому любезно предусмотрели в нем возможность писать в стандартный вывод (будь то консоль или файл) некоторую информацию, которая может помочь в решении возможных проблем с соединениями (по сути, это данные, на которых строятся защищенные соединения).

«Спровоцировать» вывод этой информации можно при помощи специального аргумента при запуске JVM: javax.net.debug. Он может иметь разные значения в зависимости от того, что нужно вывести в лог, а JVM может сама подсказать, какие значения поддерживаются. Для того чтобы получить подсказку, нужно придать аргументу значение help (то есть java -Djavax.net.debug=help MyApp) и запустить приложение, использующее SSL (при этом само приложение не заработает, так как JVM завершится сразу после вывода справки):

all            turn on all debugging
ssl            turn on ssl debugging

The following can be used with ssl:
  record       enable per-record tracing
  handshake    print each handshake message
  keygen       print key generation data
  session      print session activity
  defaultctx   print default SSL initialization
  sslctx       print SSLContext tracing
  sessioncache print session cache tracing
  keymanager   print key manager tracing
  trustmanager print trust manager tracing
  pluggability print pluggability tracing

  handshake debugging can be widened with:
  data         hex dump of each handshake message
  verbose      verbose handshake message printing

  record debugging can be widened with:
  plaintext    hex dump of record plaintext
  packet       print raw SSL/TLS packets

Что значит «can be used with ssl» и «can be widened»? Это значит, что значения могут быть составными, то есть включать в себя уточнения и/или перечисления, разделяемые знаками «:» или «,». Например, запись вида javax.net.debug=ssl:record:plaintext говорит JVM, что мы хотим видеть отладочные записи от SSL (включая TLS), причем с трассировкой по каждой записи (record) в виде шестнадцатеричного дампа (plaintext).

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


Оставить мнение

Check Also

10 научно-фантастических комиксов для тех, кто не читает комиксы и не любит супергероев

В то время как фильмы по комиксам бьют все возможные рекорды кассовых сборов, сами комиксы…