踩过的坑,记录一下
背景: 对接第三方接口,采用sm2加密方式,对调用方传过来的参数进行解密。引入所需的解密jar包和所依赖的日志jar,然后断点调试,断点走过几个节点验签正常,解密就报下面的错误。看报错信息感觉是jar冲突了,在war包中翻遍依赖的jar也没看到重名的。
在网上搜索大部分说是jar包不完整,可我这个包是刚从第三方那边要过了的,不至于给我的不完整的包吧!
找了半天终于开始有头绪了,既然是cfca.sadk.bouncycastle.util.Arrays
在相似的包中签名不一样,那就存在两个路径和文件名一样的文件。首先先把引入的jar注释–>在一个java文件中import cfca.sadk.bouncycastle.util.Arrays;
更新maven索引–>点击文件名进入class中,即找到了这个冲突文件所在的jar。
对比了即将引入的jar中确实也存在 cfca.sadk.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.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.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.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)
更多推荐
... signer information does not match signer information of other classes in the
发布评论