java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > 异常:Invalid keystore format,springboot配置ssl证书格式不合法

解决异常:Invalid keystore format,springboot配置ssl证书格式不合法问题

作者:喵喵@香菜

这篇文章主要介绍了解决异常:Invalid keystore format,springboot配置ssl证书格式不合法问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、异常:Invalid keystore format

spring boot下配置ssl,使用jks证书,开始的时候启动没有问题,打的第一个包也没有问题,但是后来不断出现证书格式不合法的异常。

有的时候就算改了证书名称,还是出如此错误。

异常如下:

Caused by: java.lang.IllegalArgumentException: Invalid keystore format
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:99) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:71) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:218) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1142) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1228) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:586) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    at org.apache.catalina.connector.Connector.startInternal(Connector.java:1005) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    ... 14 common frames omitted
Caused by: java.io.IOException: Invalid keystore format
    at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:650) ~[na:1.8.0_20]
    at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) ~[na:1.8.0_20]
    at java.security.KeyStore.load(KeyStore.java:1433) ~[na:1.8.0_20]
    at org.apache.tomcat.util.security.KeyStoreUtil.load(KeyStoreUtil.java:69) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    at org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:217) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    at org.apache.tomcat.util.net.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:206) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    at org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:283) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    at org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:247) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:97) ~[tomcat-embed-core-9.0.29.jar:9.0.29]
    ... 20 common frames omitted

二、出现问题的原因

1、原因

会出现Invalid keystore format 不合法的证书秘钥库的主要原因是证书的内容发生了变化,我们使用IDEA或者eclipse的时候自动打开证书,保存的时候发生了变化,或者是使用Git从Windos提交文件的时候,读文件以后发生了变化。

不过这两个可能原因可能性不是很高,最后的一个重要原因就是使用maven编译或者打包的时候,对文件的内容进行了修改(maven编译的时候使用了占位符,替换的时候使文件发生了变化);

2、鉴别

如何鉴别SSL证书内容是否发生了变化,主要是通过对面源文件的大小与编译后的ssl证书文件的大小。

例如我的正常的SSL证书大小为5.4kb,编译后的证书大小为8.6kb。

启动程序发现出现异常Invalid keystore format。

三、解决

方法一:不要动

将SSL证书文件放到项目中以后,不要用编程工具等的尝试打开它,证书文件在IDEA中会有一个?符号显示。

或者将文件删除,重新拷贝一份新的文件过来;(PS:个人经过实操,没用)

方法二:转换文件格式

将证书文件格式转换为其它的文件格式,可以通过keytool、openssl、或者是其它带有转换SSL证书的工具,将JKS后缀的证书转换为PFX格式的(PS:个人觉得太麻烦,而且也没必要)

方法三:禁用Maven动静态资源

在项目的POM文件中添加如下配置:

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

</project>

方法四:配置MAVEN过滤JKS等格式的文件

在项目的POM文件中添加如下插件配置:

 <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <nonFilteredFileExtensions>
                        <!--<nonFilteredFileExtension>p12</nonFilteredFileExtension>-->
                        <nonFilteredFileExtension>jks</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>
        </plugins>

ps: jks使用小写,如果大写的话,package的时候会出现异常。

四、最后

上述问题是使用JKS后缀格式的证书发现了有此问题,使用pfx后缀的证书未发现有上述问题

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文