【发布时间】:2011-02-20 19:47:53
【问题描述】:
看java的下面一行:
Mac.getInstance("HmacSHA1");
如果我把它放在一个简单的测试程序中,它在我的服务器上运行没有问题。但是,如果我在容器中使用这条线,我会得到
java.security.NoSuchAlgorithmException: Algorithm HmacSHA1 not available
at javax.crypto.Mac.getInstance(DashoA13*..)
在这两种情况下都使用相同的 JDK 安装。
在谷歌上搜索了一下之后,我通过做两件事设法让它工作:
- 将
sunjce_provider.jar从$JAVA_HOME/jre/lib/ext复制到容器的lib目录中。 -
将以下行添加到我的代码中:
java.security.Security.addProvider(new com.sun.crypto.provider.SunJCE());
具体来说,这发生在我的Apache James mailet 中,但我很确定这与 JVM 选项有关。 Here is the startup script 它使用。
虽然我最终得到了它的工作,但这个解决方案感觉太老套了,无法成为正确的解决方案。我将不胜感激对正在发生的事情的解释,以及更“适当”的解决方案。
相关问题:Using Java crypto leads to NoSuchAlgorithmException。但是,在这种情况下,我很确定应该支持开箱即用的 HmacSHA1 算法。作为证据,这在测试程序中没有问题。
【问题讨论】:
标签: java cryptography jce james