Estoy tratando de verificar la firma de un paquete en el sitio web del paquete FreeBSD
wget http://pkg.freebsd.org/FreeBSD:11:amd64/latest/digests.txz
tar xf digests.txz
Esto da tres archivos: digests
, digests.pub
digests.sig
puedo considerar que digests.sig
es una firma para el archivo digests
con el digests.pub
que la clave pública. Pero intenté confirmar eso:
openssl dgst -verify digests.pub -signature digests.sig digests
y recibí el mensaje
Verification Failure
Supongo que tengo algo mal, ¿alguien puede decirme lo que me falta?
EDITAR: Basado en una búsqueda a través del código fuente, creo que la función importante se encuentra aquí , llamada rsa_verify_cert_cb
qué llamadas RSA_verify
de la biblioteca openssl. Pero no he descubierto qué se le está dando, o si es posible llamar a esa función usando las openssl
herramientas de línea de comandos.
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
tampoco parece coincidir.sha256sum digests
Respuestas:
Como no hay un "Cómo" en Internet para la verificación manual del paquete de FreeBSD, esto es lo que he descubierto.
El truco es que la cadena de octeto en la
openssl rsautl
salida es, de hecho, hash de la cadena que es el hash SHA256 de un archivo.Por ejemplo, descargue el actual
http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz
, extráigalo y haga lo siguiente:Método 1 (uso de una línea
openssl dgst
)Aquí es importante
tr -d '\n'
dejar caer una nueva línea desde la entrada estándar, por lo que no se incluye en la entrada de cadena paraopenssl dgst
.Este comando debería salir
Verified OK
.Método 2 (comparación visual de la cadena de octetos del archivo .sig con hash generado manualmente)
Utilice la utilidad OpenSSL para volcar contenidos de digests.sig
Aquí puede ver que el objeto incrustado es un hash SHA256 y su valor es
acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
.Ahora calcule SHA256 del archivo
digests
:echo
comando y compárelo con el valor devuelto poropenssl rsautl
:Observe cómo el valor del paso 3. coincide con el valor del paso 1., por lo que el archivo
digests
es válido.fuente
Ese mensaje dice que la clave pública no coincide con el archivo que descargó. De acuerdo con la página de manual de dgst -verify filename, verifique la firma utilizando la clave pública en "filename". El resultado es "Verificación correcta" o "Fallo de verificación" La causa más probable es que el archivo se corrompió durante la descarga. Intentaría descargarlo nuevamente y si continúa fallando la verificación, eso es una señal de un enlace de descarga comprometido (pero como es del sitio web de freebsd sospecharía que es simplemente un error de descarga. Incluso entonces verificaría el nuevo descargar solo para estar seguro). Si tiene una conexión a Internet lenta / poco confiable, puede tomar algunos intentos para que se descargue correctamente. Si alguna vez necesita verificar la información sobre los comandos, '
fuente