解决异常: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后缀的证书未发现有上述问题

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

相关文章

  • Java Hibernate中的多种查询方式及示例

    Java Hibernate中的多种查询方式及示例

    Hibernate提供了多种查询方式,包括HQL查询、SQL查询、QBC查询和Criteria查询等。HQL查询是基于面向对象的查询语言,可以方便地进行对象导航和多表查询;SQL查询允许用户直接使用SQL语句进行查询;QBC查询是基于Criteria的查询,具有类型安全和可重用性的优势
    2023-04-04
  • springmvc中进行数据保存以及日期参数的保存过程解析

    springmvc中进行数据保存以及日期参数的保存过程解析

    这篇文章主要介绍了springmvc中进行数据保存以及日期参数的保存过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 详解SpringBoot Mybatis如何对接多数据源

    详解SpringBoot Mybatis如何对接多数据源

    这篇文章主要为大家介绍了SpringBoot Mybatis如何对接多数据源实现方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Java锁机制完整学习笔记(附详细代码)

    Java锁机制完整学习笔记(附详细代码)

    Java中的锁机制是并发编程的核心工具之一,通过合理使用锁、、读写锁和自旋锁,开发者可以确保多线程环境下的数据一致性和程序正确性,这篇文章主要介绍了Java锁机制完整学习的相关资料,需要的朋友可以参考下
    2025-12-12
  • 解决java.util.NoSuchElementException异常正确方法

    解决java.util.NoSuchElementException异常正确方法

    java.util.NoSuchElementException是Java中的一种异常,表示在迭代器或枚举中找不到元素,这篇文章主要给大家介绍了关于解决java.util.NoSuchElementException异常的相关资料,需要的朋友可以参考下
    2023-11-11
  • Java实现图片百叶窗效果(附源码)

    Java实现图片百叶窗效果(附源码)

    在数字图像处理领域,各种特效的实现不仅能够提升图片的美观性,也能为后续的视频合成、动画制作提供基础素材,使用 Java 语言结合 AWT/Swing 或 JavaFX,可以实现对图像的像素级操作,以达到百叶窗特效,本文给大家介绍的非常详细,感兴趣的小伙伴跟着小编一起来看看吧
    2025-05-05
  • SpringBoot中必须掌握的常用注解小结

    SpringBoot中必须掌握的常用注解小结

    Spring Boot 提供了大量的注解,用于简化配置和加速程序开发,这篇文章主要来和大家Spring Boot中的常用注解的具体使用,希望对大家有所帮助
    2024-11-11
  • 把Java程序转换成exe,可直接运行的实现

    把Java程序转换成exe,可直接运行的实现

    这篇文章主要介绍了把Java程序转换成exe,可直接运行的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java split 分隔空值无法得到的解决方式

    Java split 分隔空值无法得到的解决方式

    这篇文章主要介绍了Java split 分隔空值无法得到的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Java String的intern方法使用场景示例

    Java String的intern方法使用场景示例

    这篇文章主要介绍了Java String的intern方法使用场景示例,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-11-11

最新评论