Tomcat 9 无效的密钥库密码

Posted

技术标签:

【中文标题】Tomcat 9 无效的密钥库密码【英文标题】:Tomcat 9 invalid keystore password 【发布时间】: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 仍然会引发同样的错误。 【参考方案1】:

好的,我能够解决这个问题。我的问题是我使用了错误的连接器属性来指定密钥库密码。在我的示例中,我使用的是“keystorepass”,正确的应该是“certificateKeystorePassword”。也许我在日志中错过了它,但 Tomcat 似乎没有抛出一个适当的错误,比如“连接器的属性错误”,这很有用。

似乎 Tomcat 有不同的连接器,所以必须使用正确的连接器:

https://tomcat.apache.org/tomcat-9.0-doc/config/http.html#SSL_Support

【讨论】:

感谢分享。这么简单的事情,但我也因此而陷入困境。老实说,存在太多的文档变体,因此很容易放错位置或混淆属性。 我收到一条错误消息,指出名为“.keystore”的文件的密码无效。显然,只有像我这样的白痴才会认为“keystorePass”是正确的 XML 属性,用于指定默认名为“.keystore”的文件的密码!尤其是我的 Tomcat (9) 版本有无数文档说这正是它的用途 VersionLoggerListener 生成的条目之前 发送带有内容Match [&lt;element&gt;] failed to set property [&lt;property&gt;] to [&lt;value&gt;] 的警告,因此很容易错过。

以上是关于Tomcat 9 无效的密钥库密码的主要内容,如果未能解决你的问题,请参考以下文章

ssh 密钥密码在 Windows 中有效,但在 linux 中无效

Tomcat 8找不到用于启用https的密钥库

密钥密码和密钥库密码使用ikeyman工具

无效的密钥库格式

将密钥库密码从无密码更改为非空密码

Expo - 丢失的密钥库密码