Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Николай Ананьев  
#1 Оставлено : 1 декабря 2023 г. 19:55:51(UTC)
Николай Ананьев

Статус: Новичок

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Андрей *  
#2 Оставлено : 1 декабря 2023 г. 20:06:29(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,719
Мужчина
Российская Федерация

Сказал «Спасибо»: 500 раз
Поблагодарили: 2054 раз в 1594 постах
Здравствуйте.

1. другие приложения\сервисы проверяют?
2. в certificate точно сертификат подписанта?
Техническую поддержку оказываем тут
Наша база знаний
Offline Николай Ананьев  
#3 Оставлено : 1 декабря 2023 г. 20:08:02(UTC)
Николай Ананьев

Статус: Новичок

Группы: Участники
Зарегистрирован: 01.12.2023(UTC)
Сообщений: 4
Российская Федерация
Откуда: Москва

Пробовал через КриптоПро и Контур, оба сервиса дали положительный ответ. В сертификате с позицией 0 лежит серт от ЦБ, в 1, который я и беру, лежит сертификат того самого заказчика.
Offline Николай Ананьев  
#4 Оставлено : 1 декабря 2023 г. 20:15:13(UTC)
Николай Ананьев

Статус: Новичок

Группы: Участники
Зарегистрирован: 01.12.2023(UTC)
Сообщений: 4
Российская Федерация
Откуда: Москва

Кстати, формат подписи CAdES BES, если это чем-то поможет. Не эксперт в криптографии, но я выбрал правильный метод верификации подписи для данного формата подписи?
Offline Николай Ананьев  
#5 Оставлено : 3 декабря 2023 г. 17:53:59(UTC)
Николай Ананьев

Статус: Новичок

Группы: Участники
Зарегистрирован: 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 (он же хеш-сумма) данных в нашем файле, который подписали не совпадает с тем, который прописан в подписи. Надеюсь кому то поможет)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.