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.

Respuestas a la pregunta(3)

Su respuesta a la pregunta