Fondo rápido: Lanzamos una aplicación webstart, que incluye nuestros propios archivos jar y numerosos archivos jar de terceros. Webstart requiere que todos los archivos jar a los que hace referencia el archivo jnlp estén firmados por un solo certificado. Por lo tanto, firmamos todos los frascos (nuestros frascos y frascos de terceros) utilizando un certificado autofirmado. Algunos frascos de terceros ya están firmados por la parte que los produjo, pero solo los firmamos nuevamente, y esto funciona bien. Hasta ahora.Lo que impide que Java verifique los archivos jar firmados con múltiples algoritmos de firma
Problema: Hace poco pasamos de Java 6 a Java 7 y de repente, webstart se niega a cargar algunas jarras, quejándose de: "Inventario de firmas SHA1 inválido". Esto solo ocurre para algunos tarros y no para otros, y el hilo común aparece entre aquellos tarros que parecen tener múltiples firmas.
Después de buscar en S.O. e Internet, parece que el algoritmo de firma predeterminado para jarsigner de Java ha cambiado entre Java 6 y Java 7, de SHA1 a SHA256, y varias personas recomiendan utilizar "jarsigner -digestalg SHA1" para solucionar problemas de verificación. Intenté eso y, por supuesto, ahora verificamos nuestros frascos con signo múltiple. Así que esto parece ser una solución para nuestro problema.
Por lo que puedo deducir, parece que la firma de un tercero es una firma SHA1, y estábamos firmando con el valor predeterminado - SHA256 - lo que resulta en una mezcla de firmas. Cuando fuerzo a SHA1 con el interruptor '-digestalg', tenemos dos firmas del mismo tipo, y la verificación ahora funciona. ¿Entonces parece que el problema es causado por tener múltiples firmas con diferentes algoritmos? O hay algún otro factor que me estoy perdiendo.
Preguntas:
- ¿Por qué no verifica con SHA1 + SHA256, pero verifica con SHA1 SHA1 +? ¿Hay una razón técnica? ¿Una razón de política de seguridad? ¿Por qué no puede verificar que ambas firmas son correctas?
- ¿Hay alguna desventaja para nosotros al usar (seguir usando) SHA1 en lugar del SHA256 ahora predeterminado?
he observado que incluso, aunque SHA1 + SHA256 falla cuando se utilizan diferentes teclas ... si usted firmó el JAR utilizando SHA1 + SHA256 con la misma clave, la verificación nunca falla. –