Буду признателен, если кто-нибудь может указать мне, как автоматически извлечь сертификат X.509 из живого сетевого трафика во время фазы установления связи между клиентом и сервером в ОС Linux.
Подобный вопрос был задан тихо некоторое время назад Извлечение SSL-сертификатов из сети или файлов pcap но ответ был неполным.
В ответе говорится использовать следующую команду
ssldump -Nr file.pcap | awk 'BEGIN {c=0;} { if ($0 ~ /^[ ]+Certificate$/) {c=1; print "========================================";} if ($0 !~ /^ +/ ) {c=0;} if (c==1) print $0; }'
Но он предназначен для ручного извлечения сертификата из-за задействования файла pcap.
Может ли кто-нибудь помочь в изменении приведенной выше команды в соответствии с моими требованиями или предложить любой другой альтернативный метод, чтобы сделать то же самое.
Вы пытаетесь извлечь его из захвата пакета или просто хотите получить сертификат из командной строки во время рукопожатия?
Если вам просто нужно получить сам сертификат, вы можете сделать следующее:
echo | openssl s_client -connect sub.domain.tld:443 | openssl x509 -noout -text
Если вы запустите команду без возврата к openssl
, то вы можете увидеть гораздо больше информации о сертификате, но второй openssl
команда извлекает сам сертификат.
В echo
pipe требуется для корректного выхода оболочки OpenSSL и возврата к командной строке Bash.
Очевидно, это все запишет в STDOUT. Если вы хотите сохранить сертификат, вам нужно будет выполнить перенаправление в файл, завершив команду с > filename.crt
. Если в цепочке сертификатов есть ошибки, они не попадут в файл, а будут записаны в STDERR.