java - pkcs7 文件验证问题

标签 java security validation x509certificate pkcs#7

我的 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/

相关文章:

文件上传验证

Java 8 - 如何从列表中获取对象的多个属性?

java - 有谁知道如何在 Eclipse 中为 java 分隔控制台文本

java - 如何摆脱继承?

php - 如何以 root 身份运行 PHP exec()?

php - 如何验证我的 PHP 应用程序的用户?

asp.net - 潜在危险的表单值(使用故障页面的 Asp.net 攻击)

jquery 使用多个规则进行验证

java - hibernate validator 奇怪的 IOException : Stream closed

java - 日期对象转换为 (mm/dd/yyyy) 中的日期对象