Como extrair automaticamente o certificado X.509 do tráfego de rede ao vivo no sistema operacional Linux

6

Eu apreciarei se alguém puder me apontar 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 tempo atrás Extraindo Certificados SSL da rede ou arquivos pcap , mas 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 é dado para extração manual do certificado devido ao envolvimento do arquivo pcap.

Alguém pode nos ajudar a modificar o comando acima para atender a minha exigência ou sugerir qualquer outro método alternativo para fazer o mesmo.

    
por Prasanth 06.10.2015 / 06:24

1 resposta

2

Você está tentando especificamente extraí-lo de uma captura de pacote, ou está querendo apenas pegar o certificado da linha de comando durante o aperto de mão?

Se você está precisando apenas pegar o certificado, você pode fazer o seguinte:

echo | openssl s_client -connect sub.domain.tld:443 | openssl x509 -noout -text

Se você executar o comando sem retornar ao openssl , poderá ver muito mais detalhes sobre o certificado, mas o segundo comando openssl extrairá o próprio certificado.

O echo pipe é necessário para que o shell do OpenSSL saia de forma limpa para retornar ao prompt do Bash.

Isso obviamente irá gravar tudo no STDOUT. Se você deseja salvar o certificado, será necessário redirecionar para um arquivo finalizando o comando com > filename.crt . Se houver algum erro na cadeia de certificados, eles não serão finalizados no arquivo, mas serão gravados no STDERR.

    
por 06.10.2015 / 07:23