解决使用PKCS12格式(p12)的证书库配置Spring Boot https时启动报错IOException


在配置Spring Boot https时,如果使用PKCS12格式(后缀名为.p12)的证书库,启动时可能会报错“java.io.IOException: Invalid keystore format”或者“java.io.IOException: ObjectIdentifier() — data isn’t an object ID (tag = 48)”。可能有如下几种原因:

  • 证书库文件损坏
  • Java 8对PKCS12格式的支持不足

请检查应用实际使用的证书库文件与你本地的证书库文件是否一致,文件在传输过程中有可能损坏。另外,maven在构建时可能会对resources目录下的文件进行过滤处理,也可能导致证书库文件损坏,如果是这种情况,需要修改maven配置,禁用对证书库文件的过滤处理。具体请参见stackoverflow上的这个问题 java.io.IOException: Invalid Keystore format

Java 8对PKCS12格式支持不足,某些工具生成的PKCS12证书库,在Java 8中无法正确解析。具体请参见stackoverflow上的这个问题 IOException in Java 8 when reading PKCS12 keystore created with keytool from OpenJDK16

本人遇到的就是这个问题,测试了一下,升级到Java 11或者Java 17均可以正常启动。

针对 Java 8 的这个问题,有几个解决方案:

  • 使用 jks 格式的证书库替代 PKCS12 证书库
  • 换一种工具来生成PKCS12证书库,看看Java 8是否支持。

发表回复

您的电子邮箱地址不会被公开。

正在检测……