java.security.spec.InvalidKeySpecException DerInputStream.getLength(): lengthTag=111, too big.
2016-05-18 23:12
507 查看
开发接入某某银行支付平台需要用到xml数字签名公钥和私钥,密钥文件统一放到项目下面本地可以但是测试环境找不到路径,然后放入src/main/resources的某个目录下,然后打包部署到测试环境的jboss,测试支付环节加载签名,失败了异常如下。
报错:DerInputStream.getLength(): lengthTag=111, too big.
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : DerInputStream.getLength(): lengthTag=111, too big.
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:217)
at java.security.KeyFactory.generatePrivate(KeyFactory.java:372)
at com.msok.signatured.crypto.KryptoUtil.getStoredPrivateKey(KryptoUtil.java:136)
at com.msok.signatured.xml.digsig.XmlDigitalSignatureGenerator.generateXMLDigitalSignatureXML(XmlDigitalSignatureGenerator.java:254)
at com.msok.signatured.xml.digsig.GetXmlDigtalSign.DigtalSignProcess(GetXmlDigtalSign.java:32)
at com.msok.insure.service.impl.PayJLYHServiceImpl.checkFour(PayJLYHServiceImpl.java:104)
at com.msok.insure.service.dubbo.PayPlatformFacadeImpl.payPlatForm(PayPlatformFacadeImpl.java:117)
at com.alibaba.dubbo.common.bytecode.Wrapper27.invokeMethod(Wrapper27.java)
at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46)
at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72)
at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)
at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
本地测试排除了这个可能性,那么私钥传入的时候被修改了,首先要明确的是PKCS12对应使用*.pfx文件。
为了证实这种情况,我把maven打好的war中的证书文件替换掉,果然是这个原因。那证书为什么会被修改呢,原来就是maven-resources-plugin作怪。
报错:DerInputStream.getLength(): lengthTag=111, too big.
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : DerInputStream.getLength(): lengthTag=111, too big.
at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:217)
at java.security.KeyFactory.generatePrivate(KeyFactory.java:372)
at com.msok.signatured.crypto.KryptoUtil.getStoredPrivateKey(KryptoUtil.java:136)
at com.msok.signatured.xml.digsig.XmlDigitalSignatureGenerator.generateXMLDigitalSignatureXML(XmlDigitalSignatureGenerator.java:254)
at com.msok.signatured.xml.digsig.GetXmlDigtalSign.DigtalSignProcess(GetXmlDigtalSign.java:32)
at com.msok.insure.service.impl.PayJLYHServiceImpl.checkFour(PayJLYHServiceImpl.java:104)
at com.msok.insure.service.dubbo.PayPlatformFacadeImpl.payPlatForm(PayPlatformFacadeImpl.java:117)
at com.alibaba.dubbo.common.bytecode.Wrapper27.invokeMethod(Wrapper27.java)
at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46)
at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72)
at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)
at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
查找原因
如果把证书单独放到某个文件目录下再本地是木有问题的,根据他的源码看到的异常是本地测试排除了这个可能性,那么私钥传入的时候被修改了,首先要明确的是PKCS12对应使用*.pfx文件。
为了证实这种情况,我把maven打好的war中的证书文件替换掉,果然是这个原因。那证书为什么会被修改呢,原来就是maven-resources-plugin作怪。
那么发现问题了如何解决
可以试试如下<plugin>[/code]
<groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><configuration><encoding>UTF-8</encoding><!-- 过滤后缀为pem、pfx的证书文件 --><nonFilteredFileExtensions><nonFilteredFileExtension>pem</nonFilteredFileExtension><nonFilteredFileExtension>pfx</nonFilteredFileExtension></nonFilteredFileExtensions></configuration></plugin>
或者直接在上图3直接添加默认的,不再同步maven,更新到本地用成本地jar包。
个人呢推荐加入配置文件
相关文章推荐
- Springboot入门(使用指南)
- 线程同步和异步问题-Java
- Spring3.1+Hibernate3+Struts2的最新整合所需要的jar包
- Spring用代码来读取properties文件
- Struts2直接访问Servlet API(IoC--不推荐使用,非IoC---推荐使用)
- java基础回顾_day06_面向对象
- springmvc发布rest服务
- JAVA 类 URL
- Java环境搭建之MyEclipse优化技巧
- Eclipse导入库以后,properties-Android里面依然是红叉
- 安装 Hbase
- 过滤器和拦截器
- JAVA设计模式(12):结构型-门面模式(Facade)
- Solr 读写(Java SolrJ)
- Java学习笔记之[ 利用扫描仪Scanner进行数据输入 ]
- Struts2中jsp显示
- java中log4j的使用体验
- Java实现导出Excel文件
- JAVA设计模式(11):结构型-装饰模式(Decorator)
- Java文件读写操作