Estoy experimentando con la activación de FIPS 180-3 en mi aplicación Java. FIPS 180-3 solo permite el uso de 5 [hashes] seguros (http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf), MD5 no es uno de ellos. Por lo tanto, estoy tratando de eliminar programáticamente los algoritmos MD5 del proveedor de Sun. Este es el código de muestra.Por qué se necesita MD5 para la inicialización de JCE
public static void main(String[] args) throws Exception {
Security.removeProvider("SUN");
Sun sun = new Sun();
sun.remove("MessageDigest.MD5"); //Comment and it will work !!!
Security.addProvider(sun);
Cipher ciph = Cipher.getInstance("AES");
}
Pero esto es tirar la siguiente excepción. Si comenta "sun.remove (..." el programa funciona bien. Si elimino MD2, en lugar de MD5, también funciona bien.
Para mí, parece que las jre libs están usando MD5 para su firma, pero he comprobado jre/lib ext/firmante/sunjce_provider.jar y su uso de SHA1.
Cualquier idea de por qué mi código está fallando con este error?
Excepción en el hilo "principal" java.lang.ExceptionInInitializerError en javax .crypto.Cipher.getInstance (DashoA13 * ..) en TestRemoveMD5.main (TestRemoveMD5.java:20)
causada por: java.lang.SecurityException:. No se puede configurar para los CERT CA de confianza en javax.crypto.SunJCE_b (DashoA13 * ..) ... 3 más
causada por: java.lang.SecurityException: Las clases de firma han sido adulteradas con en javax.crypto.SunJCE_b.d (DashoA13 * ..) en javax.crypto.SunJCE_b.c (DashoA13 * ..) en javax.crypto.SunJCE_b $ 1.run (DashoA13 *. .) en java.security.AccessController.doPrivileged (Método nativo) ... 4 más
¿Ha eliminado todos los certificados de JRE Trust Store que usan MD5 hash? – Robert
Estoy usando un jdk nuevo 1.6 –
Luego debe eliminar el certificado usando MD5 del depósito de confianza del JRE. – Robert