Буду признателен, если кто-нибудь сможет подсказать мне, как автоматически извлечь сертификат 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.
Может ли кто-нибудь помочь изменить приведенную выше команду в соответствии с моими требованиями или предложить какой-либо другой альтернативный метод сделать то же самое.
решение1
Вы пытаетесь извлечь его из перехваченного пакета или просто хотите извлечь сертификат из командной строки во время рукопожатия?
Если вам нужен только сам сертификат, вы можете сделать следующее:
echo | openssl s_client -connect sub.domain.tld:443 | openssl x509 -noout -text
Если вы запустите команду без обратного перехода к openssl
, то вы сможете увидеть гораздо больше подробностей о сертификате, но вторая openssl
команда извлекает сам сертификат.
Канал echo
необходим для корректного завершения работы оболочки OpenSSL и возврата к командной строке Bash.
Это, очевидно, запишет все в STDOUT. Если вы хотите сохранить сертификат, вам нужно будет перенаправить в файл, завершив команду на > filename.crt
. Если в цепочке сертификатов есть какие-либо ошибки, они не попадут в файл, а вместо этого будут записаны в STDERR.