Я пытаюсь получить трассировку wirehark, которую я могу расшифровать для запроса между клиентом и ALB. Чтобы расшифровать транзакцию, мне нужно заставить клиент / сервер отключить PFC (идеальная прямая секретность). У меня есть доступ к закрытому ключу сервера.
Когда я это сделаю:
openssl s_client -connect server:443 -debug -msg -state -cipher AES128-SHA
оно работает.
Однако когда я это сделаю:
openssl s_client -connect keystone-ext.develop.zillow.net:443 -debug -msg -state -cipher AES128-SHA -ssl3
это не удается. Результат выглядит следующим образом:
SSL3 alert read:fatal:handshake failure SSL_connect:failed in SSLv3
read server hello A 31996:error:14094410:SSL
routines:SSL3_READ_BYTES:sslv3 alert handshake
failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.7/src/ssl/s3_pkt.c:1145:SSL
alert number 40 31996:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl
handshake
failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.7/src/ssl/s3_pkt.c:566:
Я использую:
$ openssl version OpenSSL 0.9.8zh 14 Jan 2016
Есть идеи, что я делаю неправильно?
Сервер, с которым вы, вероятно, пытаетесь связаться, не поддерживает SSL v3. Любой прилично настроенный сервер в 2019 году не поддерживает SSL v3, а для SSL / TLS требуется совместимый набор шифров на обоих концах для связи с данным шифром.
Причина, по которой такие старые шифры отключены, как раз и заключается в том, чтобы помешать гнусным актерам делать то, что вы пытаетесь сделать.
Боюсь, вам придется найти другой способ сбросить полезную нагрузку.
Как я могу использовать SSL3 для связи с сервером?
Не надо. Не меняйте протокол (и не используйте старый OpenSSL), который изменяет безопасность. Совершенная прямая секретность - это особенность.
Вместо этого используйте регистрация ключа сеанса на клиенте или сервере. Установить переменную среды SSLKEYLOGFILE
в файл для трассировки. Это поддерживается несколькими клиентами, особенно браузерами, NSS и libcurl. затем наведите на него Wireshark: Edit> Preferences, Protocols> SSL> (Pre) -Master-Secret имя файла журнала.
Изменить: еще одна ссылка на расшифровку TLS - Презентация расшифровки SSL / TLS от SharkFest ASIA 2018. Он указывает, что ECDHE нельзя расшифровать с помощью только закрытого ключа RSA. Напоминаем, что TLS 1.3 будет полностью PFS. Он также описывает состояние большего количества реализаций регистрации ключей SSL, в частности, OpenSSL и производные, позволяющие приложениям вызывать SSLCTXsetkeylogcallback()
в то время как NSS и GnuTLS имеют SSLKEYLOGFILE
переменная окружения.
Итак, для статически связанного OpenSSL вы можете попросить разработчика использовать другую библиотеку TLS или реализовать свою собственную функцию обратного вызова с ведением журнала, или вы выкопайте отладчик, чтобы извлечь его самостоятельно. Обратите внимание, что переключить используемый libssl (и обновить его) проще, если он динамически связан.
Альтернативы включают в себя преждевременное завершение TLS, например, на прокси-сервере, и захват незашифрованных пакетов или удаление PFS и расшифровку с помощью закрытого ключа.