昨天发现一个问题, 一个第三方证书的文件存放于resources文件夹下,在本地环境使用该证书进行加密调用第三方接口,没有任何问题,但是发布到测试环境和生产环境(linux)报错,提示证书工厂无法初始化。
看正式环境和本地唯一的代码区别是证书的路径不一样, 本地是windows操作系统,证书变量设值为:
plat.cert.path=E:\LOJI-GIT\eunke-web\eunke-web-war\src\main\resources\ump\cert_2d59.crt
正式环境设值为:
plat.cert.path=/data/work/cert/ump/cert_2d59.crt
经正式环境查看,该证书确实已经在对应的目录下存在, 百思不得姐, 于是通过打logger日志,发现了一个错误:
Could not parse certificate: java.io.IOException: Invalid BER/DER data (too huge?)
证书文件太大?特地比较了下本地的证书, 大小为 824B
但是部署到正式环境后, 大小却变为了 1156B
体积发生了变化, 经过百度, 发现是maven-resources-plugin在maven打包过程中作怪。
maven-resources-plugin可以在资源文件中使用诸如${propertyName}形式的Maven属性,然后配置maven-resources-plugin开启对资源文件的过滤,之后就可以针对不同环境通过命令行或者Profile传入属性的值,以实现更为灵活的构建。
然而我们的证书文件并不需要替换这些${}值, 故不需要该插件进行过滤处理, 配置增加一条,如下:
重新jenkins部署生产, 再看文件, 大小和windows保持一样, 再测试接口, 成功!