NoSuchAlgorithmException: HmacSHA1-Algorithmus nicht verfügbar ist

Blick auf die folgende Zeile java:

Mac.getInstance("HmacSHA1");

Wenn ich dies in einem einfachen Programm testen, es läuft ohne Probleme auf meinem server. Allerdings, wenn ich diese Zeile in einem container, bekomme ich

java.security.NoSuchAlgorithmException: Algorithm HmacSHA1 not available
  at javax.crypto.Mac.getInstance(DashoA13*..)

Den gleichen JDK-installation verwendet wird, in beiden Fällen.

Nach googeln Sie ein bisschen herum, ich habe es geschafft, es zu bekommen, um durch zwei Dinge:

  1. Kopieren sunjce_provider.jar aus $JAVA_HOME/jre/lib/ext in das lib Verzeichnis des Containers.
  2. Fügen Sie folgende Zeile in meinem code:

    java.security.Security.addProvider(new com.sun.crypto.provider.SunJCE());

Speziell, das passiert mir in einer Apache James mailet, aber ich bin mir ziemlich sicher, dass dies hat zu tun mit der JVM-Optionen. Hier ist das Start-script , die es verwendet.

Obwohl ich es geschafft habe in das Ende, die Lösung fühlt sich zu gehackt zu werden, der richtige. Ich würde mich über eine Erklärung, was Los ist, sowie eine "richtige" Lösung.

Stellt sich die Frage,: Mit Hilfe der Java crypto führt zu NoSuchAlgorithmException. Aber in diesem Fall bin ich ziemlich sicher, dass die HmacSHA1-Algorithmus sollte out of the box unterstützt. Als Beweis, das funktioniert ohne Probleme in einem test-Programm.

InformationsquelleAutor itsadok | 2010-05-18
Schreibe einen Kommentar