228 votos

¿cómo descargar el certificado ssl de un sitio web?

Quiero descargar el certificado ssl de, por ejemplo https://www.google.com Utilizando wget o cualquier otro comando. ¿Alguna línea de comandos unix? ¿Wget o openssl?

314voto

Sean Reifschneider Puntos 4951

Para descargar el certificado, es necesario utilizar el cliente integrado en openssl de esta manera:

echo -n | openssl s_client -connect HOST:PORTNUMBER \
    | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert

Esto guardará el certificado en /tmp/$SERVERNAME.cert .

Puede utilizar -showcerts si quiere descargar todos los certificados de la cadena. Pero si sólo quiere descargar el certificado del servidor, no es necesario especificar -showcerts

echo -n da una respuesta al servidor, por lo que la conexión se libera

sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' elimina la información sobre la cadena de certificados y los detalles de la conexión. Este es el formato preferido para importar el certificado a otros almacenes de claves.

15 votos

Aprecio que no sólo haya dado una buena respuesta, sino también una explicación precisa.

0 votos

En -showcerts ¿también mostrar el certificado del servidor/de la hoja? Pensaba que sólo mostraba los intermedios cuando se incluía ese interruptor.

0 votos

Como decía la respuesta, s_client siempre muestra el cert del servidor (si hay uno, es decir, el servidor responde a hello y no elige una suite anónima). -showcerts muestra todo los certificados recibidos, primero el del servidor y luego los intermedios y/o root.

72voto

RainDoctor Puntos 1232

He encontrado la respuesta. Openssl la proporciona.

openssl s_client -connect ${REMHOST}:${REMPORT}

2 votos

también openssl x509 -text <<EOF cert-text EOF para ver los detalles del certificado

2 votos

sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem cortesía de serverfault.com/questions/139728/

2 votos

este consigue lo mismo y se salta el sed piratear.

29voto

bignose Puntos 459

El GNUTLS herramienta para el cliente, gnutls-cli también puede facilitarlo:

gnutls-cli --print-cert www.example.com \
        < /dev/null \
        > www.example.com.certs

El programa está diseñado para proporcionar un cliente interactivo al sitio, por lo que es necesario darle una entrada vacía (en este ejemplo, de /dev/null ) para finalizar la sesión interactiva.

1 votos

¿Cómo se puede hacer que gnutls se conecte a través del proxy https (configurado en todo el sistema) e imprimir el certificado que intercambia?

0 votos

esto imprime demasiados certificados, no sé cuáles

0 votos

este gnutls-cli da el último cert, tengo el viejo cert cuando se utiliza openssl s_client

15voto

ThorSummoner Puntos 214
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509

este modo de openssl espera stdin, por lo que lo proporcionamos a través de true | , se conecta al servidor especificado en el parámetro -connect. 2>/dev/null silencia los errores (opcional), podemos pasar toda la salida al analizador x509, especificando /dev/stdin para utilizar la tubería Shell como archivo de entrada. Y eso dará como resultado sólo el -----BEGIN CERTIFICATE----- a -----END CERTIFICATE----- parte de la s_client de salida. Puede redirigirla a un archivo añadiendo > google.com.pem al final del comando.


Lo mejor que puedo decir es que esto no verifica la cadena del certificado, sólo puede decir qué identidad ssl proporciona el servidor final.

10voto

code_burgar Puntos 6845

Basado en la respuesta de @bignose, aquí hay una versión autónoma que encaja bien en, por ejemplo, una receta de chef:

sudo apt-get install gnutls-bin 
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: