У меня большая и странная проблема с файлами ценных бумаг 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 неправильный, но я проверил его с другими приложениями, и он выглядит правильно. Кроме того, этот файл отправляется кидает веб-сервис, и он возвращает, что все в порядке!
И для получения дополнительной информации, если файл p7s создан с помощью разных инструментов (.net и capicom) и одного и того же сертификата, я могу правильно проверить.
Я искал решение, но ничего. Я нашел такое же исключение в подобных ситуациях, но либо предложенное решение не работает для меня, либо оно не появляется.
Любые советы по поиску решения будут очень признательны.