Quiero descargar el certificado SSL desde, digamos https://www.google.com , usando wget o cualquier otro comando. ¿Alguna línea de comando de Unix? wget o openssl?
Quiero descargar el certificado SSL desde, digamos https://www.google.com , usando wget o cualquier otro comando. ¿Alguna línea de comando de Unix? wget o openssl?
Respuestas:
Para descargar el certificado, debe utilizar el cliente integrado en openssl de la siguiente manera:
echo -n | openssl s_client -connect HOST:PORTNUMBER \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert
Eso guardará el certificado en /tmp/$SERVERNAME.cert
.
Puede usarlo -showcerts
si desea descargar todos los certificados de la cadena. Pero si solo desea descargar el certificado del servidor, no es necesario especificar-showcerts
echo -n
da una respuesta al servidor, para que se libere la conexión
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
elimina información sobre la cadena de certificados y los detalles de conexión. Este es el formato preferido para importar el certificado a otros almacenes de claves.
-showcerts
Muestra también el servidor / certificado de hoja? Pensé que solo mostraba intermedios cuando se incluía ese interruptor.
s_client
siempre muestra el certificado del servidor (si hay uno, es decir, el servidor responde a hola y no elige un conjunto anónimo). -showcerts
muestra todos los certificados recibidos, primero el certificado del servidor y luego los intermedios y / o la raíz.
Encontré la respuesta. Openssl lo proporciona.
openssl s_client -connect $ {REMHOST}: $ {REMPORT}
openssl x509 -text <<EOF cert-text EOF
para ver detalles del certificado
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/…
La herramienta de cliente GNUTLSgnutls-cli
también puede facilitar esto:
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 debe proporcionarle una entrada vacía (en este ejemplo, desde /dev/null
) para finalizar la sesión interactiva.
basado en la respuesta @bignose, aquí hay una versión independiente que encaja bien, por ejemplo, en 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
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 |
, esto 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 el /dev/stdin
uso de la tubería de shell como el archivo de entrada. Y que es la salida sólo el -----BEGIN CERTIFICATE-----
que -----END CERTIFICATE-----
parte de la s_client
salida. Puede redirigir eso a un archivo agregando > google.com.pem
al final del comando.
Lo mejor que puedo decir es que esto no verifica la cadena de certificados, solo puede decirle qué identidad SSL proporciona el servidor final.
x509
lee stdin por defecto, por lo que -in /dev/stdin
es redundante (3) s_client
verifica que el certificado del servidor se encadene correctamente a un ancla de confianza local (root) y no haya expirado, pero suprimió la información que mostraría esto (4) NO verifica la revocación (5) verifica el nombre en el certificado del servidor solo en 1.0.2 y luego no de manera predeterminada (pero puede verificarlo usted mismo fácilmente mirando el certificado después)