curl для Windows: файл sslkeylog всегда пуст при запуске из PowerShell

Вопрос или проблема

Я пытаюсь захватить мастер-ключи, используемые для шифрования TLS, когда curl запускается из PowerShell, но файл журнала всегда пуст.

Я уже загрузил curl и создал псевдоним в своем профиле:

> set-alias curl d:\...\bin\curl.exe

Когда я проверяю версию, кажется, что PowerShell использует правильную версию:

>  curl --version
curl 8.11.1 (x86_64-w64-mingw32) libcurl/8.11.1 LibreSSL/4.0.0 zlib/1.3.1 brotli/1.1.0 zstd/1.5.6 WinIDN libpsl/0.21.5 libssh2/1.11.1 nghttp2/1.64.0 ngtcp2/1.10.0 nghttp3/1.7.0
Release-Date: 2024-12-11
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp ws wss
Features: alt-svc AsynchDNS brotli CAcert HSTS HTTP2 HTTP3 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM PSL SPNEGO SSL SSPI threadsafe UnixSockets zstd

Тем не менее, я не могу получить заполненный файл мастер-ключа:

> pwsh -command {$env:SSLKEYLOGFILE='sslkey.log'; curl -s "https://somesite.org"}
> cat sslkey.log
> ls

    Directory: C:\Users\luisabreu\tests

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---           1/20/2025 11:33 AM              0 sslkey.log

Файл создается, но он всегда пуст.

Чего мне не хватает?

Поскольку вы используете LibreSSL (как показано в выводе версии curl), это может быть корнем вашей проблемы. LibreSSL не поддерживает SSLKEYLOGFILE так же, как OpenSSL.

Таким образом, чтобы решить эту проблему:

  1. Во-первых, вам нужно получить сборку curl, использующую OpenSSL вместо LibreSSL. Вы можете проверить официальные загрузки curl или использовать менеджер пакетов, такой как Chocolatey или Scoop, которые предоставляют сборки на основе OpenSSL.

  2. Как только у вас будет правильная сборка, попробуйте установить переменную окружения перед запуском curl. В PowerShell это можно сделать в одной строке:

$env:SSLKEYLOGFILE="$PWD\sslkey.log"; curl -s "https://somesite.org"
  1. Если вы хотите убедиться, что используете сборку на основе OpenSSL, проверьте вывод версии — там должно быть указано OpenSSL вместо LibreSSL.

Альтернативный подход, если вы хотите остаться на текущей настройке:

  1. Используйте встроенные возможности Wireshark для дешифрования TLS
  2. Или используйте Fiddler, который может дешифровать HTTPS-трафик без необходимости SSLKEYLOGFILE

Ответ или решение

Ваш вопрос связан с проблемой пустого файла sslkey.log при запуске curl из PowerShell, когда вы пытаетесь зафиксировать мастер-ключи, используемые для TLS-шифрования. На основе предоставленных данных, проблема может возникать из-за того, что используемая вами сборка curl основана на LibreSSL, который не поддерживает переменную среды SSLKEYLOGFILE так, как это делает OpenSSL.

Теория (Theory):

Начнем с рассмотрения того, что SSLKEYLOGFILE — это переменная среды, которая используется некоторыми библиотеками SSL для записи мастер-ключей TLS в указанный файл. Когда эти ключи записываются, они могут быть использованы для расшифровки TLS-трафика средствами вроде Wireshark. Эта фича изначально была поддержана в OpenSSL, но, к сожалению, отсутствие поддержки в LibreSSL не позволяет вести логирование ключей в файл, что и является корнем вашей проблемы.

Пример (Example):

Вы загрузили и настроили curl в PowerShell, указав путь к его исполняемому файлу и проверив его версию. В выводе команды curl --version, который вы представили, видно, что curl использует LibreSSL:

curl 8.11.1 (x86_64-w64-mingw32) libcurl/8.11.1 LibreSSL/4.0.0

Это указывает на использование LibreSSL вместо OpenSSL. При установке переменной среды SSLKEYLOGFILE и запуске curl, файл sslkey.log создается, но остается пустым.

Применение (Application):

Чтобы решить эту проблему, вам следует использовать сборку curl, которая основана на OpenSSL. Следующие шаги помогут вам достичь требуемого результата:

  1. Установка curl с OpenSSL:

    • Вместо LibreSSL-зависимого curl, загрузите версию, которая поддерживает OpenSSL. Это можно сделать, используя менеджеры пакетов, такие как Chocolatey или Scoop, которые предоставляют сборки curl с поддержкой OpenSSL.

    • Пример установки через Chocolatey может выглядеть так:

      choco install curl -y
    • Убедитесь, что при использовании команды curl --version в выводе указано OpenSSL:

      curl 8.11.1 (x86_64-w64-mingw32) libcurl/8.11.1 OpenSSL/1.x.x
  2. Установка переменной среды:

    • В PowerShell установите переменную среды SSLKEYLOGFILE перед запуском curl, чтобы убедиться в ее применении:

      $env:SSLKEYLOGFILE="$PWD\sslkey.log"; curl -s "https://somesite.org"
    • Теперь файл sslkey.log должен содержать записи мастер-ключей TLS.

  3. Варианты альтернативного решения:

    • Если вам необходимо сохранить текущую конфигурацию LibreSSL, рассмотрите возможность использования инструментов, таких как Wireshark, которые могут работать с перехватом и декодированием TLS-трафика без необходимости в SSLKEYLOGFILE.
    • Еще одним вариантом является Fiddler — прокси-сервер, который может расшифровывать HTTPS-трафик и предоставлять информацию о TLS-шифровании.

Подводя итог, для успешного логирования мастер-ключей TLS с использованием переменной среды SSLKEYLOGFILE, необходима версия curl с поддержкой OpenSSL. Если установка этого инструмента вызывает затруднения, воспользуйтесь альтернативными инструментами, чтобы достичь аналогичных результатов по расшифровке и анализу сетевого трафика.

Оцените материал
Добавить комментарий

Капча загружается...