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

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

相关文章

  • gRPC在Java中的实现与应用详解

    gRPC在Java中的实现与应用详解

    gRPC是由Google开发的高性能、开源的通用远程过程调用(RPC)框架,本文将详细介绍如何在Java中使用gRPC,包括服务定义、服务器端实现、客户端调用以及一些高级特性,我们将通过代码示例来帮助理解gRPC的工作原理,需要的朋友可以参考下
    2024-06-06
  • 浅谈多线程_让程序更高效的运行

    浅谈多线程_让程序更高效的运行

    下面小编就为大家带来一篇浅谈多线程_让程序更高效的运行。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • java冒泡排序算法代码

    java冒泡排序算法代码

    这篇文章介绍了java冒泡排序算法代码,有需要的朋友可以参考一下
    2013-10-10
  • SpringBoot Shiro 权限注解不起作用的解决方法

    SpringBoot Shiro 权限注解不起作用的解决方法

    本文主要介绍了SpringBoot Shiro 权限注解不起作用的解决方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Java SimpleDateFormat线程不安全问题

    Java SimpleDateFormat线程不安全问题

    这篇文章详细介绍了如可解决impleDateFormat线程不安全的问题,对多线程问题感兴趣的同学可以参考阅读本文
    2023-03-03
  • Java全面解析XML格式串(JDOM解析)

    Java全面解析XML格式串(JDOM解析)

    下面小编就为大家带来一篇Java全面解析XML格式串(JDOM解析)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • idea引入外部jar包的方法实现

    idea引入外部jar包的方法实现

    本文主要介绍了idea引入外部jar包的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • java 数组转list的两种方式

    java 数组转list的两种方式

    这篇文章主要介绍了java 数组转list的两种方式,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-10-10
  • Java中的cglib代理详解

    Java中的cglib代理详解

    这篇文章主要介绍了Java中的cglib代理详解, 代理模式是一种设计模式,它可以为其他对象提供一种代理,以控制对该对象的访问,可以在运行时动态地创建代理对象,而不需要手动编写代理类的代码,需要的朋友可以参考下
    2023-09-09
  • Java中文件读写操作与常用技巧分享

    Java中文件读写操作与常用技巧分享

    在 Java I/O 体系中,File 类是唯一代表磁盘文件本身的对象,而File 类定义了一些与平台无关的方法来操作文件,所以下面我们一起来看看 File 类有哪些操作方法吧
    2023-06-06

最新评论