NoSuchAlgorithmException: Algorithm HmacSHA1 no disponible
Mira la siguiente línea de java:
Mac.getInstance("HmacSHA1");
Si pongo esto en un programa de prueba simple, se ejecuta sin problemas en mi servidor. Sin embargo, si uso esta línea en un contenedor, obtengo
java.security.NoSuchAlgorithmException: Algorithm HmacSHA1 not available
at javax.crypto.Mac.getInstance(DashoA13*..)
La misma instalación JDK se usa en ambos casos.
Después de buscar un poco en Google, logré que funcionara haciendo dos cosas:
Proceso de copiarsunjce_provider.jar
de$JAVA_HOME/jre/lib/ext
al directorio lib del contenedor.Agregar la siguiente línea a mi código:
java.security.Security.addProvider(new com.sun.crypto.provider.SunJCE());
Específicamente, esto me pasa en unApache James mailet, pero estoy bastante seguro de que esto tiene que ver con las opciones de JVM.Aquí está el script de inicio que usa
Aunque al final lo hice funcionar, la solución se siente demasiado pirateada para ser la correcta. Agradecería una explicación de lo que está sucediendo, así como una solución más "adecuada".
Pregunta relacionada: El uso de Java crypto conduce a NoSuchAlgorithmException. Sin embargo, en este caso, estoy bastante seguro de que el algoritmo HmacSHA1 debe ser compatible de inmediato. Como evidencia, esto funciona sin problemas en un programa de prueba.