首页 > 解决方案 > Spring Boot Application SSL 属性配置:setKeyStorePassword 之前的 getKeyStorePassword

问题描述

在尝试使用 spring boot 和 tomcat 配置 HTTPS/SSL 功能时,我开始看到这个错误:

Caused by: java.lang.IllegalArgumentException: Invalid keystore format
        at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:116)
        at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:87)
        at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:225)
        at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1150)
        at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:591)
        at org.apache.catalina.connector.Connector.startInternal(Connector.java:1018)
        ... 22 common frames omitted

SSL.java进一步挖掘,我看到了填充类的顺序(SSL.java是用于配置的基本 POJO)。访问 POJO 以获取值的顺序令人震惊。我在“set”调用之前看到了“get”调用(特别是getKeyStorePassword在 之前setKeyStorePassword)。这可不好!

这似乎是一个非常奇怪的弹簧错误,它与自己竞争以设置和获取值。在这种情况下,即使正确的值最终到位,SSL 配置也会失败,因为它们在设置之前已被访问。有人可以强调为什么会这样以及潜在的解决方法吗?

我们使用的是 Spring 1.5.12,可以确认所有配置都是正确的。

标签: javaspring-bootssl

解决方案


奇怪的是,这似乎是一个 POM/Maven 问题。

通过将我们的资源过滤设置为 false,应用程序开始以正确的顺序设置其所有变量。

<resource>
   <directory>src/main/java/resources</directory>
   <filtering>false</filtering>
</resource>

推荐阅读