我有一个 JCEKS 密钥库,我从 war 文件中加载它作为资源。我正在使用密钥库来存储用于 AES 加密的密钥。当我尝试在直接打开文件的罐装项目中读取密钥库时,密钥库工作正常。但是,当我将密钥库作为资源访问时,出现以下异常:
java.io.IOException: Keystore was tampered with, or password was incorrect
at com.sun.crypto.provider.JceKeyStore.engineLoad(DashoA13*..)
at java.security.KeyStore.load(KeyStore.java:1185)
做了一点谷歌搜索后,这让我相信我使用的密码不正确,但在验证它们是正确的之后,我仍然收到错误。这是我尝试加载密钥库数据的地方。
public class AegisDataStoreFactory {
...
static {
InputStream in = null;
try{
final Configuration conf = Configuration.getConfiguration();
final KeyStore ks = KeyStore.getInstance("JCEKS");
in = AegisDataStoreFactory.class.getResourceAsStream(KEYSTORE);
final String password = conf.getProp("keyStorePassword").trim();
ks.load(in, password.toCharArray());
...
} finally {
if(in != null) {
in.close();
}
}
}
...
}
程序在加载时因 IOException 而失败。我在这里不知所措。当我不在战争中加载它时,它工作正常。我正在使用 Maven 生成战争文件。
有什么想法吗?
编辑:我知道发生了什么。我使用 Maven 进行构建,并且在构建期间我为资源文件启用了过滤。到目前为止,我的资源目录中没有任何二进制文件(我只有一些我想要过滤的属性文件)。一旦我从过滤中排除了密钥库,但仍确保密钥库已移动,它就可以工作了。