Доброго дня.
Для одного из наших заказчиков делаем подписание документов ЭП. Используем для подписания библиотеку JCP 2.0. У Заказчика поднят свой УЦ на продукте DSS.
Для подписания и верификации подписей используем механизм SOAP.
С подписанием документов проблем не возникло. Все подписывается и возвращается (подписываем отсоединенной подписью).
Подпись проверили вручную с использованием вашего инструмента
https://dss.cryptopro.ru/Frontend/VerifyДалее мы начали встраивать проверку подписи в нашем собственном веб-приложении. Мы установили в JRE библиотеку JCP 2.0 и добавили файлы BowncyCastle 1.50, а затем обновили наш старый код до новых используемых интерфейсов. Однако, когда мы попытались провести проверку в нашей реализации, то получили следующую ошибку:
Sign verify error: sign_is_invalid Error building certification path for CN=Ivanov Ivan Ivanovich: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
Чтобы решить эту проблему, мы загрузили сертификат пользователя и добавили его в хранилище хранилищ хранилища cacerts по умолчанию, но поскольку сертификат пользователя является производным сертификатом, исключение сообщает нам, что цепочка не может быть завершена, даже если она находится в cacerts:
Issuer: CN="Тестовый УЦ ООО \"КРИПТО-ПРО\" (УЦ 2.0)", O="ООО \"КРИПТО-ПРО\"", C=RU, L=Москва, EMAILADDRESS=info@cryptopro.ru, OID.1.2.643.3.131.1.1=#120C303037373137313037393931, OID.1.2.643.100.1=#120D31303337373030303835343434
Кусок кода, который ведет верификацию:
Collection<X509Certificate> xChain = new ArrayList<X509Certificate>();
CAdESSignature cadesSignature = new CAdESSignature(signature, data, null);
cadesSignature.verify(xChain);
Соответственно вопросы:
1. В чем может быть проблема? Все ли мы делаем правильно при проверке подписи? Ранее мы не работали с JCP 2.0 и DSS, опыт ограничивался JCP 1.0 и локальными криптопро (криптоармом) с использованием корневых сертификатов УЦ.
2. Есть ли образцы примеров для верификации подписи для описанной выше конфигурации? Возможно у DSS сервера существует соответствующая API?