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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Виктор 75  
#1 Оставлено : 19 декабря 2024 г. 12:23:03(UTC)
Виктор 75

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 2 раз в 2 постах
Добрый день!

Подписываем изображение, используем созданный контейнер, на выходе получаем подписанный файл, судя по массиву байт. При проверке подписи на десктопной версии "Инструменты КриптоПро", получаем ответ: "Подпись не найдена". Пример написан на Kotlin.

photo_2024-12-19_18-05-02.jpg (44kb) загружен 4 раз(а).

proudrso.000.zip (2kb) загружен 1 раз(а).


Код:

fun signDataTest(file: File): ByteArray? {
        val fileData = Files.readAllBytes(file.toPath())
        val password = "123"
        val alias = "proud_sosow"
        val keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME)
        keyStore.load(null, null)

        // Формируем цепочку для подписи
        val chain: MutableList<X509Certificate> = mutableListOf()
        for (certificate in keyStore.getCertificateChain(alias)) {
            Log.i("@@@@","Certificate is ${certificate}")
            chain.add(certificate as X509Certificate)
        }

        val cAdESSignature = CAdESSignature()

        val signatureStream = ByteArrayOutputStream()

        cAdESSignature.open(signatureStream)
        cAdESSignature.update(fileData)

        cAdESSignature.close()
        signatureStream.close()
        return signatureStream.toByteArray()
    }

Отредактировано пользователем 19 декабря 2024 г. 12:39:02(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Виктор 75 за этот пост.
savuerka оставлено 19.12.2024(UTC)
Offline Евгений Афанасьев  
#2 Оставлено : 19 декабря 2024 г. 12:42:38(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,976
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 708 раз в 669 постах
Здравствуйте.
Надо в подпись добавить сам сертификат подписи. Это делается с помощью CAdESSignature#setCertificateStore, он принимает список X509CertificateHolder.
Offline Виктор 75  
#3 Оставлено : 19 декабря 2024 г. 12:46:37(UTC)
Виктор 75

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 2 раз в 2 постах
Здравствуйте!

Подскажите, пожалуйста, так?
cAdESSignature.addSigner(JCSP.PROVIDER_NAME, null, null, privateKey, chain, CAdESType.CAdES_BES, null, false, null, null, null, true)
Offline Виктор 75  
#4 Оставлено : 19 декабря 2024 г. 13:43:33(UTC)
Виктор 75

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 2 раз в 2 постах
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Надо в подпись добавить сам сертификат подписи. Это делается с помощью CAdESSignature#setCertificateStore, он принимает список X509CertificateHolder.


Внесли изменения по вашей рекомендации, но столкнулись с ошибкой.


Код:
    
    fun signDataTest(file: File): ByteArray? {
        System.setProperty("com.sun.security.enableCRLDP", "true")
        System.setProperty("com.ibm.security.enableCRLDP", "true")
        val fileData = Files.readAllBytes(file.toPath())
        val password = "123"
        val alias = "proud_sosow"
        val keyStore = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME)
        keyStore.load(null, null)
        val certificate = keyStore.getCertificate(alias) as X509Certificate
        val privateKey = keyStore.getKey(alias, password.toCharArray()) as PrivateKey
        val chain: MutableList<X509Certificate> = mutableListOf()
        for (certificate in keyStore.getCertificateChain(alias)) {
            Log.i("@@@@","Certificate is ${certificate}")
            chain.add(certificate as X509Certificate)
        }
        val cAdESSignature = CAdESSignature(false)
        cAdESSignature.certificateStore = CollectionStore(chain)
        val signatureStream = ByteArrayOutputStream()
        cAdESSignature.open(signatureStream)
        cAdESSignature.update(fileData)
        cAdESSignature.close()
        signatureStream.close()
        return signatureStream.toByteArray()
    }


test.log (5kb) загружен 3 раз(а).

photo_2024-12-19_19-31-29.jpg (42kb) загружен 10 раз(а).
thanks 1 пользователь поблагодарил Виктор 75 за этот пост.
savuerka оставлено 19.12.2024(UTC)
Offline Евгений Афанасьев  
#5 Оставлено : 19 декабря 2024 г. 15:52:05(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,976
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 708 раз в 669 постах
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Надо в подпись добавить сам сертификат подписи. Это делается с помощью CAdESSignature#setCertificateStore, он принимает список X509CertificateHolder.

В cAdESSignature.certificateStore попадает
X509CertificateHolder или X509Certificate?

Отредактировано пользователем 19 декабря 2024 г. 15:52:45(UTC)  | Причина: Не указана

Offline savuerka  
#6 Оставлено : 19 декабря 2024 г. 15:52:07(UTC)
savuerka

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Надо в подпись добавить сам сертификат подписи. Это делается с помощью CAdESSignature#setCertificateStore, он принимает список X509CertificateHolder.


Столкнулся с подобной проблемой, но это не решило проблему, не могли бы Вы подсказать, как правильно реализовать данный функционал?
Offline Виктор 75  
#7 Оставлено : 19 декабря 2024 г. 16:13:26(UTC)
Виктор 75

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 2 раз в 2 постах
Автор: Евгений Афанасьев Перейти к цитате
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Надо в подпись добавить сам сертификат подписи. Это делается с помощью CAdESSignature#setCertificateStore, он принимает список X509CertificateHolder.

В cAdESSignature.certificateStore попадает
X509CertificateHolder или X509Certificate?


Мы получаем X509CertificateHolder

2024-12-19_21-58-57.jpg (57kb) загружен 8 раз(а).
Offline Евгений Афанасьев  
#8 Оставлено : 19 декабря 2024 г. 16:44:15(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,976
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 708 раз в 669 постах
Приведите тогда стек ошибки, лог.
Offline Евгений Афанасьев  
#9 Оставлено : 19 декабря 2024 г. 16:45:29(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 3,976
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 708 раз в 669 постах
И где в вашем примере addSigner.
Offline Виктор 75  
#10 Оставлено : 19 декабря 2024 г. 16:55:28(UTC)
Виктор 75

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 2 раз в 2 постах
Автор: Евгений Афанасьев Перейти к цитате
Приведите тогда стек ошибки, лог.


В логах ошибки нет, дополнительно прикрепляю результат подписания
test1.log (46kb) загружен 1 раз(а).
IMG_20241112_175648.jpg.sig (918kb) загружен 1 раз(а).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (21)
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.