... signer information does not match signer information of other classes in the same package

踩过的坑,记录一下

背景: 对接第三方接口,采用sm2加密方式,对调用方传过来的参数进行解密。引入所需的解密jar包和所依赖的日志jar,然后断点调试,断点走过几个节点验签正常,解密就报下面的错误。看报错信息感觉是jar冲突了,在war包中翻遍依赖的jar也没看到重名的。
       在网上搜索大部分说是jar包不完整,可我这个包是刚从第三方那边要过了的,不至于给我的不完整的包吧!
       找了半天终于开始有头绪了,既然是cfca.sadk.org.bouncycastle.util.Arrays在相似的包中签名不一样,那就存在两个路径和文件名一样的文件。首先先把引入的jar注释–>在一个java文件中import cfca.sadk.org.bouncycastle.util.Arrays;更新maven索引–>点击文件名进入class中,即找到了这个冲突文件所在的jar。
       对比了即将引入的jar中确实也存在 cfca.sadk.org.bouncycastle.util.Arrays的文件,且内容都是一样的(不知道谁cp谁的)。问题虽然找到了,但是两个文件都在第三方jar中,也是不好处理啊,毕竟没有源码无法自己修改重新打个jar。
       最后的处理办法是最新的jar正常引入,打war包后,放进tomcat启动前删除之前含有冲突文件的jar,再启动,测试接口正常。
        注: 此种解决方式有局限性,这个错误是发生在运行时,编译时正常,运行前删掉冲突jar,tomcat启动时加载就不会冲突;且上个jar是另一个客户接口所依赖的jar和当前客户无关,故可以采用删除jar的方式。

851001: encoding required DERSequence encoding
java.lang.SecurityException: class "cfca.sadk.org.bouncycastle.util.Arrays"'s signer information does not match signer information of other classes in the same package
	at cfca.sadk.x509.certificate.X509Cert.certFrom(X509Cert.java:970)
	at cfca.sadk.x509.certificate.X509Cert.certFrom(X509Cert.java:924)
	at cfca.sadk.x509.certificate.X509Cert.<init>(X509Cert.java:152)
	at com.cib.yypt.frontendbasic.gm.a.a(B64CfcaUtil.java:54)
	... 6 more
Caused by: 851001: encoding required DERSequence encoding
java.lang.SecurityException: class "cfca.sadk.org.bouncycastle.util.Arrays"'s signer information does not match signer information of other classes in the same package
	at cfca.sadk.asn1.parser.ASN1Parser.getDERSequenceFrom(ASN1Parser.java:150)
	at cfca.sadk.x509.certificate.X509Cert.certFrom(X509Cert.java:965)
	... 9 more
Caused by: java.lang.SecurityException: class "cfca.sadk.org.bouncycastle.util.Arrays"'s signer information does not match signer information of other classes in the same package
	at java.lang.ClassLoader.checkCerts(ClassLoader.java:898)
	at java.lang.ClassLoader.preDefineClass(ClassLoader.java:668)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:761)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值