SpringBoot中加载加密证书报错处理

发生背景

开发深证银盛支付接口,需要用到公钥和私钥,密钥文件统一放在src/main/resources/key的某个目录下。在本地测试过程中出现:

1
2
报错:DerInputStream.getLength(): lengthTag=111, too big. 

错误定位

通过本地debug发现,在证书加载过程中出现这个问题,但是路径以及密钥都没有问题,于是在网上寻找解决方案,得出的为问题原因可能有两种。

  • 原因1: 由于路径过长导致文件加载错误。(显然不是这个原因)
  • 原因2: 由于maven在编译过程中修改了文件,导致文件失效,故而出现加载错误。

为了证实这种情况,我把maven打好的war中的证书文件替换掉,果然是这个原因。那证书为什么会被修改呢,原来就是maven-resources-plugin作怪。

解决方案

1
2
3
4
5
6
7
8
9
10
11
12
<plugin> 
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<!-- 过滤后缀为cer、pfx的证书文件 -->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>cer</nonFilteredFileExtension>
<nonFilteredFileExtension>pfx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>