Usar un descargador de sitios web de línea de comandos, como wget
, curl
o cualquier otro ... En un script ...
Tengo la huella digital certificada SHA-1 y SHA-256 de un sitio web. Debido a problemas de seguridad ( 1 ) ( 2 ), no quiero usar el sistema público de autoridad de certificación SSL. La huella digital debe estar codificada.
¿Puede una aplicación como wget verificar la huella digital SSL?
wget no tiene esa funcionalidad. ( 3 )
Usar wget --ca-certificate
o curl --cacert
tendría que ejecutar mi propia autoridad de certificación local, lo que me gustaría evitar, porque eso agrega mucha complejidad. También es ultra difícil y nadie lo había hecho antes. ( 4 )
¿No hay alguna herramienta como
download --tlsv1 --serial-number xx:yy:zz --fingerprint xxyyzz https://site.com
?
La solución, por supuesto, no debe ser vulnerable a TOCTOU. ( 5 ) El MITM podría permitir devolver una huella digital válida para la solicitud del cliente openssl y alterar la siguiente solicitud de wget.
Respuestas:
Fuente
Instale el software requerido:
Descargue el certificado SSL público:
O mejor:
Obtenga la huella digital SHA-1:
Obtenga la huella digital SHA-256:
Compare manualmente las huellas digitales SHA-1 y SHA-256 con torproject.org Preguntas frecuentes: SSL .
Opcionalmente, los certificados ca son inútiles para fines de prueba. Usando curl aquí, pero wget tiene un error Bug y usa los archivos ca de todos modos.
Descargar con curl y el certificado anclado:
fuente
En tcsh:
fuente
zsh
, también debería funcionar para bashEsto también es suficiente:
fuente
-md5
opción para recuperar la huella digital MD5.-md5
no debe ponerse entre-in
yserver.crt
.Esto es bastante fácil de hacer con el
openssl
comando y la funcionalidad de su cliente.El siguiente pequeño script tomará un dominio dado (sin prefijo https) y una huella digital SHA-1, y saldrá sin error (0) si la huella digital recuperada coincide, pero con el código de salida 1 si no hay coincidencia. Luego puede incorporarlo a su script simplemente probando el último código de salida
$?
:fuente
wget
y compilarlo con OpenSSL para que realice lo que desea en línea, pero eso está más allá del alcance de una respuesta AU.(echo -ne "Host: ${HOST}\n\rGET ${URL}\n\r" && yes) 2>/dev/null | openssl s_client -connect ${HOST}:443
debería funcionar, ¿no? Bueno, debe dividir la información de la sesión SSL de la respuesta de contenido real.fuente
Como se describe en la documentación de Net :: SSLeay, este método significa verificación después de la transacción HTTP, por lo que no debe utilizarse si desea verificar que está hablando con el servidor correcto antes de enviarles datos. Pero si todo lo que está haciendo es decidir si confiar o no en lo que acaba de descargar (que parece ser de su referencia # 4), está bien.
fuente
Ese es mi guión cotidiano:
Ouput:
fuente