【发布时间】:2019-01-11 18:55:59
【问题描述】:
尝试在 Windows 10 中使用 JDK10 在 Tomcat 9 中设置 SSL。当我按照在线教程使用默认密码“changeit”创建 Java 密钥库时,一切正常,并且 Tomcat 启动时没有错误。 但是,如果我使用“changeit”以外的其他密钥库密码创建密钥库,tomcat 会抛出此错误:
Caused by: java.lang.IllegalArgumentException: keystore password was incorrect
这是创建密钥库的命令:
keytool -genkey -alias tomcat -keyalg RSA -keystore c:\certificates\tomcatkeystore
这是有效的 SSL 连接器。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="C:/certificates/tomcatkeystore"
type="RSA" clientAuth="false" sslProtocol="TLS" keystorePass="changeit" />
</SSLHostConfig>
</Connector>
SSL 连接器不起作用。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="C:/certificates/tomcatkeystore"
type="RSA" clientAuth="false" sslProtocol="TLS" keystorePass="testing" />
</SSLHostConfig>
</Connector>
为什么如果我按照与上述完全相同的步骤但更改为不同的密钥库密码并在 server.xml 中指定它会生成上述 Tomcat 错误?
注意:在这两种情况下我注意到的一件事是 keytool 命令从不提示我输入“密钥密码”,就像许多在线示例显示的那样。使用默认的“changeit”密码以外的其他 keytool 命令吗?
谢谢。
【问题讨论】:
-
(1) 如果您在创建和配置时始终使用不同的密码,它应该可以工作;
keytool -list -keystore $file使用该密码有效吗? (2) 直到最近,Java 都默认使用 JKS 格式,它使用单独的“keystore”和“key”密码,但 Java9 和 10 默认使用 PKCS12 格式(如实施),所以现在不会提示您输入“key”密码除非您使用 BC 提供程序指定-storetype JKS或 JCEKS 或 BKS,否则您将收到一条警告,提示您应该升级到 PKCS12(!) -
是的 -list 在创建密钥库后工作正常。我还尝试更改密钥库密码,但仍然存在同样的问题,并且 -list 只是为了确保但 Tomcat 仍然会引发同样的错误。
标签: java tomcat ssl keystore tomcat9