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

 更新时间:2024年03月05日 10:10:01   作者:喵喵@香菜  
这篇文章主要介绍了解决异常: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后缀的证书未发现有上述问题

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

相关文章

  • maven实现docker自动化部署插件的使用

    maven实现docker自动化部署插件的使用

    本文主要介绍了maven实现docker自动化部署插件的使用,分享给大家,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • springboot单独使用feign简化接口调用方式

    springboot单独使用feign简化接口调用方式

    这篇文章主要介绍了springboot单独使用feign简化接口调用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java安全之Mojarra JSF反序列化讲解

    Java安全之Mojarra JSF反序列化讲解

    JSF 和类似的 Web 技术之间的区别在于 JSF 使用 ViewStates(除了会话)来存储视图的当前状态(例如,当前应该显示视图的哪些部分),这篇文章主要介绍了Java安全之Mojarra JSF反序列化知识讲解,包括漏洞复现和漏洞分析,需要的朋友可以参考下
    2022-11-11
  • JVM的垃圾回收机制真是通俗易懂

    JVM的垃圾回收机制真是通俗易懂

    这篇文章主要为大家详细介绍了JVM的垃圾回收机制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • java8异步调用如何使用才是最好的方式

    java8异步调用如何使用才是最好的方式

    异步调用主要用于当前程序的执行不用等待调用方法执行结束就可以继续执行,下面这篇文章主要给大家介绍了关于java8异步调用如何使用才是最好的方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • JAVA中的队列(Queue)详解

    JAVA中的队列(Queue)详解

    这篇文章主要介绍了JAVA中的队列(Queue)详解,队列是一种特殊的线性表,遵循先入先出、后入后出的基本原则,一般来说,它只允许在表的前端进行删除操作,需要的朋友可以参考下
    2023-07-07
  • java自己手动控制kafka的offset操作

    java自己手动控制kafka的offset操作

    这篇文章主要介绍了java自己手动控制kafka的offset操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • mybatis 实体类字段大小写问题 字段获取不到值的解决

    mybatis 实体类字段大小写问题 字段获取不到值的解决

    这篇文章主要介绍了mybatis 实体类字段大小写问题 字段获取不到值的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java异常处理实例教程

    Java异常处理实例教程

    这篇文章主要为大家分享一份非常详细的Java异常处理实例教程,帮助大家更好的学习java异常处理,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • IDEA 插件 mapper和xml互相跳转操作

    IDEA 插件 mapper和xml互相跳转操作

    这篇文章主要介绍了IDEA 插件 mapper和xml互相跳转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02

最新评论