Буду признателен, если кто-нибудь может указать мне на инструмент или подход для извлечения сертификатов SSL / TLS из живых HTTPS-соединений (напрямую из сети) или из файла сетевой трассировки (файл pcap). Я попытался использовать ssldump, но мне не удалось извлечь сертификаты. Я также могу использовать для этого Wireshark (вручную), но я хочу сделать это автоматически. Я использую для этого платформу Linux. Спасибо
Изменить: я хочу извлечь сертификат SSL, который сервер отправляет клиенту (браузеру) во время рукопожатия SSL. Я хочу использовать сетевой сниффер (tcpdump) для захвата SSL-соединений в сети, а затем извлечь сертификаты из полученного файла pcap (или сделать это вживую).
Вам нужны сертификаты в определенном формате (PEM / DER / ...)?
ssldump может отображать проанализированные сертификаты ASN.1 с параметром -N и читать файл pcap как ввод с помощью -r. Следующая команда может показать вам сертификаты в удобочитаемой форме.
ssldump -Nr file.pcap | awk 'BEGIN {c=0;} { if ($0 ~ /^[ ]+Certificate$/) {c=1; print "========================================";} if ($0 !~ /^ +/ ) {c=0;} if (c==1) print $0; }'
Сценарий awk не самый чистый, но выполняет свою работу (улучшения более чем приветствуются).
Параметр -x команды ssldump покажет вам фактическую полезную нагрузку пакета (packet_data). Это будет включать в себя поля уровня записи и протокола рукопожатия (т.е. не только сертификат). Более интеллектуальный сценарий / код мог бы извлечь его оттуда и преобразовать в более общий формат.
Самый простой способ извлечь сертификаты X.509 из файла PCAP с трафиком SSL (например, HTTPS) - загрузить PCAP в бесплатное программное обеспечение с открытым исходным кодом NetworkMiner. Вы найдете извлеченный сертификат на вкладке «Файлы» в NetworkMiner.
NetworkMiner автоматически извлекает сертификаты X.509 на диск из сеансов SSL / TLS, идущих на любой из следующих портов TCP: 443, 465, 563, 992, 993, 994, 995, 989, 990, 5223, 8170, 8443, 9001 и 9030 .
Вы можете скачать NetworkMiner здесь: http://sourceforge.net/projects/networkminer/
Также смотрите это руководство, чтобы узнать, как установить и запустить NetworkMiner в Linux: http://www.netresec.com/?page=Blog&month=2014-02&post=HowTo-install-NetworkMiner-in-Ubuntu-Fedora-and-Arch-Linux
Живые соединения обычно шифруются с помощью сеансового ключа, который устанавливается в начале сеанса. Вы не можете отслеживать их, даже если у вас есть все ключи, если у вас нет дампа рукопожатия этого сеанса.
Но вы можете видеть, какие хосты и порты обмениваются данными. SSL-сертификаты сервера обычно привязаны к порту и хосту, поэтому вы можете легко проверить SSL-сертификат сервера с помощью
openssl s_client -connect example.com:443
куда example.com
это сервер и 443
это порт, к которому подключается ваш клиент.