Agradecerei se alguém puder me indicar como extrair um certificado X.509 do tráfego de rede ativo automaticamente durante a fase de handshake entre cliente e servidor no sistema operacional Linux.
Uma pergunta semelhante foi feita há algum tempoExtraindo certificados SSL da rede ou arquivos pcapmas a resposta estava incompleta.
A resposta diz para usar o seguinte comando
ssldump -Nr file.pcap | awk 'BEGIN {c=0;} { if ($0 ~ /^[ ]+Certificate$/) {c=1; print "========================================";} if ($0 !~ /^ +/ ) {c=0;} if (c==1) print $0; }'
Mas é fornecido para extração manual do certificado devido ao envolvimento do arquivo pcap.
Alguém pode ajudar a modificar o comando acima para atender às minhas necessidades ou sugerir qualquer outro método alternativo para fazer o mesmo.
Responder1
Você está tentando extraí-lo especificamente de uma captura de pacote ou deseja apenas obter o certificado da linha de comando durante o handshake?
Se você precisar apenas obter o certificado, poderá fazer o seguinte:
echo | openssl s_client -connect sub.domain.tld:443 | openssl x509 -noout -text
Se você executar o comando sem retornar para openssl
, poderá ver muito mais detalhes sobre o certificado, mas o segundo openssl
comando extrai o próprio certificado.
O echo
pipe é necessário para que o shell OpenSSL saia corretamente e retorne ao prompt do Bash.
Obviamente, isso escreverá tudo em STDOUT. Se quiser salvar o certificado, você precisará redirecionar para um arquivo finalizando o comando com > filename.crt
. Se houver algum erro na cadeia de certificados, ele não terminará no arquivo, mas será gravado em STDERR.