【发布时间】:2011-02-17 11:20:06
【问题描述】:
我在启动 Tomcat 6 时遇到以下问题:
[INFO] [talledLocalContainer] Caused by: java.io.IOException: Invalid keystore format
[INFO] [talledLocalContainer] at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633)
[INFO] [talledLocalContainer] at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38)
[INFO] [talledLocalContainer] at java.security.KeyStore.load(KeyStore.java:1185)
[INFO] [talledLocalContainer] at org.springframework.ws.soap.security.support.KeyStoreFactoryBean.afterPropertiesSet(KeyStoreFactoryBean.java:123)
我已将 KeyStoreFactoryBean 配置为在我的类路径中加载一个密钥库,这是我自己使用 java 1.6.0_05 制作的。
奇怪的是,当我使用 Eclipse 启动同一个 Tomcat 时,密钥库会毫无问题地加载。如果我使用 Cargo Maven 插件启动 Tomcat,我会得到这个异常。如果我在新下载的 Tomcat 6 中安装应用程序,我会得到异常。不幸的是,在我们的 unix 环境中部署应用程序时,我遇到了同样的异常。
我安装的唯一 jdk 版本是 1.6.0_05 和 1.6.0_23,但是我对这两个版本都进行了尝试,但似乎没有什么区别。我也在另一台只有 1.6.0_05 的机器上试过,也没有用。 在他的应用程序中使用相同密钥库的同事没有任何问题,并且他的 Spring 配置完全相同(但不要认为问题出在此处)。
查看 JavaKeyStore (source code) 的源代码时,您可以看到它会检查从密钥库中读取的前两个整数,以检查其格式并引发异常。我无法想象使用 Eclipse 启动 Tomcat 有什么不同可能会导致这段代码以其他方式执行而不抛出异常。
谷歌搜索也没有帮助我,很多人似乎得到了这个例外,但通常是因为他们使用旧版本的 jdk 制作了密钥库。
编辑:提供者是“SUN 版本 1.6”,类型是 JKS。这两种情况都是一样的,工作和不工作。
【问题讨论】:
-
只是猜测,会不会是密码错误造成的?此外,我会尝试编写一个小型 Java 应用程序来加载商店,看看有什么用。特别是这将确保使用的引擎类型,例如 KeyStore.getInstance("JKS");
-
密码无效会导致“Caused by: java.io.IOException: Keystore was tampered with, or password is wrong”。编写一个小应用程序是个好主意。
标签: java tomcat6 ssl-certificate