java Tomcat和SSL:密钥库格式无效
我在启动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)
我已经将KeystreactoryBean配置为在我的类路径中加载一个密钥库,这是我使用java 1.6.005创建的
奇怪的是,当我使用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)的源代码时,可以看到它检查从keystore读取的前两个int,以检查其格式并引发异常。我无法想象使用Eclipse启动Tomcat有什么不同,可能会导致这段代码以其他方式执行,而不会引发异常
谷歌搜索也帮不上我的忙,很多人似乎都遇到了这个例外,但通常是因为他们用较旧版本的jdk创建了密钥库
编辑:提供程序是“SUN version 1.6”,类型是JKS。这两种情况都是一样的,不管是有效的还是无效的
# 1 楼答案
解决方法:maven构建过滤了证书(使用资源插件),并以某种方式更改了密钥库。从资源插件中排除密钥库解决了这个问题