java.security.NoSuchAlgorithmException:在 jboss 上部署时 AES KeyGenerator 不可用

Posted

技术标签:

【中文标题】java.security.NoSuchAlgorithmException:在 jboss 上部署时 AES KeyGenerator 不可用【英文标题】:java.security.NoSuchAlgorithmException: AES KeyGenerator not available while deploy on jboss 【发布时间】:2017-05-08 19:07:23 【问题描述】:

我有一个问题,我需要你的帮助。在 jboss 上部署项目时出现此错误:

Unexpected exception initializing encryption.  No encryption will be performed.: javax.faces.FacesException: java.security.NoSuchAlgorithmException: AES KeyGenerator not available
    at com.sun.faces.renderkit.ByteArrayGuard.setupKeyAndMac(ByteArrayGuard.java:232)
    at com.sun.faces.renderkit.ByteArrayGuard.<init>(ByteArrayGuard.java:89)
    at com.sun.faces.renderkit.ClientSideStateHelper.init(ClientSideStateHelper.java:496)
    at com.sun.faces.renderkit.ClientSideStateHelper.<init>
Caused by: java.security.NoSuchAlgorithmException: AES KeyGenerator not available
    at javax.crypto.KeyGenerator.<init>(KeyGenerator.java:169)
    at javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:223)
    at com.sun.faces.renderkit.ByteArrayGuard.setupKeyAndMac(ByteArrayGuard.java:226)
    ... 29 more

【问题讨论】:

它运行在什么版本/风格的 Java 上? 哪个代码会抛出错误? 我使用的是 jdk 1.8.0_112。我刚刚启动 Jboss 以在 Jboss IDE 上部署我的项目。 【参考方案1】:

Java 的每个实现都需要支持一些标准算法,例如 AES 或 DES。这在documentation of KeyGenerator 中有说明。所以你的 Java 环境设置可能有问题。

在 oracle 的 java 实现中,算法类应该位于sunjce_provider.jar(至少对于 1.7 和 1.8 版本),通常位于 $JAVA_HOME/jre/lib/ext 下。

一个常见的错误是,此目录不在您的类路径中,当您通过显式定义扩展目录时,可能会发生这种情况

java -Djava.ext.dirs=/my/other/dir <more arguments...>

如果您以这种方式指定扩展目录,您还应该包含$JAVA_HOME/jre/lib/ext(并确保JAVA_HOME 设置正确):

java -Djava.ext.dirs=/my/other/dir:$JAVA_HOME/jre/lib/ext  <more arguments...>

在 JBoss/Wildfy 中,这通常在配置文件 bin/standalone.conf(或旧版本中的 bin/run.conf)中完成。 关于java扩展及其配置的详细信息可以在here找到。

【讨论】:

我个人从未见过 lib/ext 不在类路径中,但我看到默认情况下 AES 没有激活

以上是关于java.security.NoSuchAlgorithmException:在 jboss 上部署时 AES KeyGenerator 不可用的主要内容,如果未能解决你的问题,请参考以下文章