Статус: Новичок
Группы: Участники
Зарегистрирован: 01.12.2023(UTC) Сообщений: 4 Откуда: Москва
|
Здравствуйте. Заказчик присылает 2 файла в письме, 1 - это архив с данными, второй - это файл с расширением .sig, т.е. подпись, которой подписан первый файл. Внутри файла подписи лежит 2 сертификата, алгоритм у подписи 1.2.643.7.1.1.3.2, т.е. GOST3411-2012-256. Использую BouncyCastle 1.64 Для проверки пытался использовать следующий код: PKCS7 pkcs7 = new PKCS7(sigBytes) X509Certificate certificate = pkcs7.getCertificates()[1] Signature signature = Signature.getInstance(certificate.sigAlgName, new BouncyCastleProvider()) signature.initVerify(certificates.publicKey) signature.update(file.bytes) signature.verify(certificate.signature) Метод каждый раз возвращает false. Уже пробовали и хешсуммы туда подкладывать, ничего не помогает. Прочитал все темы тут на похожую тему, так же ни один совет еще не помог. Отредактировано пользователем 1 декабря 2023 г. 20:06:33(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,320 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Здравствуйте.
1. другие приложения\сервисы проверяют? 2. в certificate точно сертификат подписанта? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 01.12.2023(UTC) Сообщений: 4 Откуда: Москва
|
Пробовал через КриптоПро и Контур, оба сервиса дали положительный ответ. В сертификате с позицией 0 лежит серт от ЦБ, в 1, который я и беру, лежит сертификат того самого заказчика.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 01.12.2023(UTC) Сообщений: 4 Откуда: Москва
|
Кстати, формат подписи CAdES BES, если это чем-то поможет. Не эксперт в криптографии, но я выбрал правильный метод верификации подписи для данного формата подписи?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 01.12.2023(UTC) Сообщений: 4 Откуда: Москва
|
Проблему удалось решить изменив подход. Использовал следующий код:
CMSSignedData signedData = new CMSSignedData(new CMSProcessableByteArray(archiveWithDataBytes), signatureFileBytes) JcaSimpleSignerInfoVerifierBuilder verifierBuilder = new JcaSimpleSignerInfoVerifierBuilder() for (SignerInformation signerInfo : signedData.getSignerInfos()) { Collection<X509CertificateHolder> certificateHolders = signedData.getCertificates().getMatches(signerInfo.getSID()); for (X509CertificateHolder certificateHolder : certificateHolders) { SignerInformationVerifier verifier = verifierBuilder.setProvider(new BouncyCastleProvider()).build(certificateHolder); if (signerInfo.verify(verifier)) { signatureValidated = true } } }
Если в CMSSignedData передавать только первый параметр, то получается проверка прикрепленной подписи, с 2-м параметром - проверка открепленной. Если передать некорректный файл в первый параметр, то задание падает с ошибкой CMSSignerDigestMismatchException: message-digest attribute value does not match calculated value. Это означает, что digest (он же хеш-сумма) данных в нашем файле, который подписали не совпадает с тем, который прописан в подписи. Надеюсь кому то поможет)
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close