Apreciaría si alguien pudiera indicarme cómo extraer un certificado X.509 del tráfico de red en vivo automáticamente durante la fase de protocolo de enlace entre el cliente y el servidor en el sistema operativo Linux.
Hace algún tiempo se hizo una pregunta similar en voz baja.Extracción de certificados SSL de la red o archivos pcappero la respuesta fue incompleta.
La respuesta dice usar el siguiente comando.
ssldump -Nr file.pcap | awk 'BEGIN {c=0;} { if ($0 ~ /^[ ]+Certificate$/) {c=1; print "========================================";} if ($0 !~ /^ +/ ) {c=0;} if (c==1) print $0; }'
Pero se proporciona para la extracción manual del certificado debido a la participación del archivo pcap.
¿Alguien puede ayudarme a modificar el comando anterior para adaptarlo a mis necesidades o sugerir algún otro método alternativo para hacer lo mismo?
Respuesta1
¿Está intentando extraerlo específicamente de una captura de paquete o simplemente desea obtener el certificado de la línea de comando durante el protocolo de enlace?
Si solo necesita obtener el certificado, puede hacer lo siguiente:
echo | openssl s_client -connect sub.domain.tld:443 | openssl x509 -noout -text
Si ejecuta el comando sin volver a openssl
, podrá ver muchos más detalles sobre el certificado, pero el segundo openssl
comando extrae el certificado en sí.
La echo
tubería es necesaria para que el shell OpenSSL salga limpiamente y pueda regresar al indicador de Bash.
Obviamente, esto escribirá todo en STDOUT. Si desea guardar el certificado, deberá redirigirlo a un archivo finalizando el comando con > filename.crt
. Si hay algún error en la cadena de certificados, no terminará en el archivo, sino que se escribirá en STDERR.