Windows 2003 Server 中的 java.io.IOException key 大小太大

标签 java

我在 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/

相关文章:

java - ContentProposalAdapter 防止选择提案上出现新行

java - Servlet 向另一个具有授权的 Servlet 请求

java - Android Studio 中未生成 MainActivityBinding 文件

Java - keyPressed 事件未被调用

java - Java中的Sobel边缘检测程序

java - Android Retrofit 2 发布请求响应以及响应类名称

java - 亚马逊 Corretto 11 32 位

java - 怎么在小数点前加0

java - 如何使用注释验证 Struts2 中的 boolean 字段?

java - 从 NetBeans 中的 WSDL 使用 .Net Web 服务时出错