我在 Ubuntu 中的 Netbeans 中创建了一个使用 Java keystore 的 Java 项目。当我在 Ubuntu 中运行 jar 文件时没有问题并且工作正常。当我在 Windows 2003 服务器中运行相同的 jar 文件时,出现以下错误
java.io.IOException: Keysize too big
at sun.security.JavaKeyStore.engineLoad
at sun.security.provider.JavaKeyStore$JKS.engineLoad
at java.security.KeyStore.load
在网上搜索后,我发现这是因为内存不足错误。但尝试了一些修复。什么都不起作用。关于如何解决这个问题的任何想法。
看起来像是一些环境问题。 keystore 文件是在 Linux 中使用 keytool 创建的。 如果我在 Windows 中使用 keytool 来列出这样的键 $keytool -list -keystore 文件
我收到 keytool java.io.IOException Keysize 太大。
如果我在 Windows 中创建 keystore ,应用程序中不会出现错误,但问题是我必须使用相同的 keystore 。它有公钥和私钥。相同的 keystore 文件在 Linux 中完美运行。
最佳答案
在某些时候,JavaKeyStore.engineLoad
方法正在执行类似的操作(以下代码片段来自 OpenJDK ):
// Read the private key
try {
entry.protectedPrivKey = new byte[dis.readInt()];
} catch (OutOfMemoryError e) {
throw new IOException("Keysize too big");
}
令我惊讶的是,它捕获了 OutOfMemoryError
并将其作为 IOException
重新抛出...好吧,这是他们的代码。
因此,错误来自于尝试创建真正的大字节数组。我怀疑,实际的 key 有那么大,所以在我看来,输入文件要么已损坏,要么被误解,因此该方法尝试使用不是 key 实际大小(以字节为单位)的值创建该数组。
关于Windows 2003 Server 中的 java.io.IOException key 大小太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5142396/