Отличная особенность Wireshark - возможность расшифровывать трафик SSL. Почему вы можете захотеть сделать это, как это сделать, почему это работает и как уменьшить вероятность того, что другие люди смогут расшифровать ваш «безопасный» трафик.
Шаг первый - настроить защищенный SSL-сервер для использования в качестве испытательного стенда
Чтобы проиллюстрировать этот процесс, мы собираемся использовать OpenSSL для генерации сертификата и выступать в качестве веб-сервера, работающего по протоколу HTTP через SSL (он же HTTPS) - это довольно просто.
Для начала нам нужно получить самозаверяющий сертификат, который может использовать наш HTTPS-сервер. Мы можем сделать это с помощью одной команды:
openssl req -x509 -nodes -newkey rsa: 1024 -keyout testkey.pem -out testcert.pem
OpenSSL попросит вас ввести данные для заполнения вашего сертификата; После того , как вы ответите на все вопросы, результатом этой команды будет два файла:
testkey.pem (содержащий 1024-битный закрытый ключ RSA) и testcert.pem (содержащий самозаверяющий сертификат). Файлы формата PEM (Privacy Enhanced Mail) имеют открытый текст и состоят из тела в кодировке BASE64 с верхним и нижним колонтитулами. Вы можете посмотреть содержимое вашего ключа и файлов сертификатов более подробно, например:
openssl rsa -in testkey.pem -text -noout openssl x509 -in testcert.pem -text -noout (вывод здесь ) (вывод здесь ; дополнительная информация здесь )
Нам нужно выполнить одну крошечную настройку формата файла закрытого ключа (Wireshark будет использовать это позже, и он не будет работать должным образом, пока мы не сделаем это):
openssl rsa -in testkey.pem -out testkey.pem
Теперь мы готовы запустить наш HTTPS-сервер:
openssl s_server -key testkey.pem -cert testcert.pem -WWW -шифр RC4-SHA -принимать 443
Параметры -key и -cert для команды s_server ссылаются на только что созданные файлы, а параметр -WWW (этот регистр учитывает регистр) заставляет OpenSSL действовать как простой веб-сервер, способный извлекать файлы в текущем каталоге (в примере тестовый файл myfile.html для Цели теста).
Параметр -cipher указывает серверу использовать определенный набор шифров - используем RC4-SHA, потому что именно это используется при переходе на https://www.google.com . Набор шифров RC4-SHA будет использовать ключи RSA для аутентификации и обмена ключами, 128-битный RC4 для шифрования и SHA1 для хеширования.
После того, как наш сервер запущен и работает, мы можем указать браузеру по адресу https: //myserver/myfile.html и получить наш тестовый файл по протоколу SSL (вы можете игнорировать любые предупреждения о действительности сертификата). Если у вас это работает, мы можем перейти к ...
Шаг второй - захватить трафик с помощью Wireshark
Запустите Wireshark на серверном компьютере, в идеале с фильтром захвата, например, «tcp port 443», чтобы мы не захватывали ненужный трафик. После того, как мы запишемся, наведите ваш браузер (работающий на другом компьютере) на https: //myserver/myfile.html и остановите захват, как только он будет завершен.
Щелкните правой кнопкой мыши на любом из захваченных фреймов и выберите «Следовать по TCP-потоку» - появится всплывающее окно, в основном заполненное гоббедом, защищенным SSL:
Шаг третий - настройка Wireshark для расшифровки
Закройте окно TCP Stream и выберите «Настройки» в меню «Правка» Wireshark. Разверните узел «Протоколы» в дереве слева и прокрутите вниз до SSL (в более новых версиях Wireshark вы можете открыть узел и ввести SSL, и он перенесет вас туда).
После выбора SSL справа появляется опция для ввода «списка ключей RSA». Введите что-то вроде этого:
10.16.8.5.443, http, c: \ openssl-win32 \ bin \ testkey.pem
Вам необходимо отредактировать IP-адрес сервера и путь к testkey.pem в зависимости от ситуации. Если это сработало, мы заметим две вещи:
SSL-анализатор Wireshark может просматривать иным образом зашифрованные SSL-пакеты и анализировать протокол внутри:
Мы можем щелкнуть правой кнопкой мыши по любому из захваченных кадров, которые перечислены как SSL или TLS, и выбрать «Следить за потоком SSL»:
Итак, почему это работает? Наш тестовый сервер, как и очень большая часть веб-серверов HTTP-over-SSL, использует RSA для обмена симметричным ключом сеанса, который будет использоваться алгоритмом шифрования (в данном случае RC4). Ниже выписка из RFC2246 :
F.1.1.2. Обмен ключами RSA и аутентификация
С RSA, обмен ключами и аутентификация сервера объединены. Открытый ключ может содержаться либо в сертификате сервера, либо может быть временным ключом RSA, отправленным в сообщении обмена ключами сервера.
После проверки сертификата сервера клиент шифрует pre_master_secret с открытым ключом сервера.
Сервер, конечно, может расшифровать pre_master_secret, переданный ему клиентом (используя закрытый ключ сервера в testkey.pem ), и впоследствии и клиент, и сервер получают из него master_secret - это симметричный ключ, который обе стороны будут использовать с RC4 для шифрования сеанса.
Но сервер не единственный с закрытым ключом, который соответствует открытому ключу в сертификате сервера - он есть и у Wireshark. Это означает, что он может расшифровать pre_master_secret на пути от клиента к серверу, а затем получить master_secret, необходимый для расшифровки трафика.
SSL-сертификат подтверждает, что домен принадлежит реальной компании и что его владелец вправе пользоваться секретным ключом на законных основаниях. Разница между HTTP и HTTPS. HTTPS (HyperText Transfer Protocol Secure) – это расширение протокола HTTP, поддерживающее шифрование.
Данные, передаваемые по протоколу HTTP, «упаковываются» в криптографический протокол SSL или TLS. По умолчанию HTTPS использует 443 TCP-порт (для незащищенного HTTP – 80)