看下面的java行:
Mac.getInstance("HmacSHA1");
如果我把它放在一个简单的测试程序中,它在我的服务器上运行没有问题。但是,如果我在容器中使用这条线,我会得到
java.security.NoSuchAlgorithmException: Algorithm HmacSHA1 not available
at javax.crypto.Mac.getInstance(DashoA13*..)
在这两种情况下都使用相同的 JDK 安装。
在谷歌搜索了一下之后,我设法通过做两件事让它工作:
- 复制
sunjce_provider.jar
from$JAVA_HOME/jre/lib/ext
到容器的 lib 目录。 将以下行添加到我的代码中:
java.security.Security.addProvider(new com.sun.crypto.provider.SunJCE());
具体来说,这发生在我的Apache James邮件中,但我很确定这与 JVM 选项有关。这是它使用的启动脚本。
虽然我最终让它工作了,但这个解决方案感觉太老套了,不可能是正确的。我将不胜感激对正在发生的事情的解释,以及更“正确”的解决方案。
相关问题:使用 Java 加密会导致 NoSuchAlgorithmException。但是,在这种情况下,我很确定应该支持开箱即用的 HmacSHA1 算法。作为证据,这在测试程序中没有问题。