Estaba leyendo la página de manual para el jarsigner
herramienta que viene con el JDK. Esta línea me sorprendió:
Una verificación aún se considera exitosa si ninguno de los archivos que estaban en el archivo JAR cuando se generó la firma se ha cambiado desde entonces, lo cual es el caso si los hashes en las secciones sin encabezado del archivo .SF son iguales Los hashes de las secciones correspondientes en el archivo de manifiesto.
Esto no tiene sentido para mí. ¿No pudo un atacante ocultar código malicioso en un archivo jar ya firmado?
Actualización: Aquí hay un ejemplo de este escenario. Parece que jarsigner marcará el tarro como que contiene archivos adicionales, pero todavía lo considera verificado.
=> jar -cf twelfthnight.jar TwelfthNight.html
=> keytool -genkey -alias signFiles -keystore examplestore
=> jarsigner -keystore examplestore twelfthnight.jar signFiles
Enter Passphrase for keystore:
jar signed.
Warning:
The signer certificate will expire within six months.
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not be able to validate this jar after the signer certificate's expiration date (2016-10-16) or after any future revocation date.
=> jarsigner -verify twelfthnight.jar
jar verified.
Warning:
This jar contains entries whose certificate chain is not validated.
This jar contains entries whose signer certificate will expire within six months.
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not be able to validate this jar after the signer certificate's expiration date (2016-10-16) or after any future revocation date.
Re-run with the -verbose and -certs options for more details.
=> jar uf twelfthnight.jar Hamlet.html
=> jarsigner -verify twelfthnight.jar
jar verified.
Warning:
This jar contains unsigned entries which have not been integrity-checked.
This jar contains entries whose certificate chain is not validated.
This jar contains entries whose signer certificate will expire within six months.
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not be able to validate this jar after the signer certificate's expiration date (2016-10-16) or after any future revocation date.
Re-run with the -verbose and -certs options for more details.