我的 PKCS7 证券文件有一个大而奇怪的问题。
我创建了一个 p7s 文件,就像 http://www.thatsjava.com/java-tech/85019/ 中建议的那样。它创建文件并仅使用 sun 库验证它。效果很好。
当我想验证该文件时,问题就开始了。它返回此异常:
java.security.SignatureException: Signature encoding error
at sun.security.rsa.RSASignature.engineVerify(RSASignature.java:185)
at java.security.Signature$Delegate.engineVerify(Signature.java:1140)
at java.security.Signature.verify(Signature.java:592)
at sun.security.pkcs.SignerInfo.verify(SignerInfo.java:374)
at sun.security.pkcs.PKCS7.verify(PKCS7.java:494)
at sun.security.pkcs.PKCS7.verify(PKCS7.java:511)
at sun.security.pkcs.PKCS7.verify(PKCS7.java:533)
at firma.FirmaDigitalImpl.firmarCadenaSun(FirmaDigitalImpl.java:553)
at firma.FirmaDigitalImpl.firmarCadena(FirmaDigitalImpl.java:249)
at firma.FirmaDigitalImpl.firmarCadena(FirmaDigitalImpl.java:147)
at firma.TestFirma.main(TestFirma.java:75)
Caused by: java.io.IOException: Sequence tag error
at sun.security.util.DerInputStream.getSequence(DerInputStream.java:280)
at sun.security.rsa.RSASignature.decodeSignature(RSASignature.java:209)
at sun.security.rsa.RSASignature.engineVerify(RSASignature.java:174)
... 10 more
但问题并不总是出现,仅出现在用于签名的证书类型上。我会更好地解释。 我有两个证书(存储在智能卡中),第一个工作正常;我创建了 p7s,接下来我验证正确,但第二个证书允许我创建 p7s 文件,但当我验证它时,它返回 SignatureException。我以为p7s文件是错误的,但是我用别人的应用程序测试了它,看起来是正确的。此外,这个文件被发送抛出webservice并且它返回,它是好的!
有关更多信息,如果 p7s 文件是使用不同的工具(.net 和 capicom)和相同的证书创建的,那么我可以正确验证。
我已经寻找了解决方案,但一无所获。我在类似的情况下发现了相同的异常,但是建议的解决方案对我不起作用,或者没有出现。
任何寻找解决方案的建议将不胜感激。
最佳答案
可能是编码问题:文本与二进制。 PKCS7 可以采用 DER 编码的二进制格式或 PEM 格式(即 base64 编码的 DER)。在文本编辑器(例如记事本)中打开文件,看看有效的是二进制文件还是文本文件。
关于java - pkcs7 文件验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5167174/