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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Zabava44  
#1 Оставлено : 24 сентября 2020 г. 14:14:34(UTC)
Zabava44

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

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

Сказал(а) «Спасибо»: 2 раз
Доброго времени суток! Не так давно изучаю CryptoPro JCP, и возникли следующие вопросы:
  1. Правильно ли я понимаю, что под объектом Сигнатура подразумевается служебная информация, которая добавляется в бинарные данные после шифрования: кто подписал данные (организация), чей сертификат, и т.д.?
  2. Опираюсь на сайт для тестирования создания электронной подписи. Можно ли ознакомиться с исходным кодом данного сайта, или в какой директории в .jar-файле (samples-sources.jar) есть что-то подобное? На текущий момент опираюсь на файлы из директории "Crypt_samples", однако, там, если я правильно понимаю, только шифрование значения, без добавления сигнатуры. P.S. в тех примерах использовался устаревший ГОСТ (от 2001 года), пришлось немного переписывать.

Если говорить глобально, то потребность состоит в отправке подписанного значения (в формате JSON) на API Честного Знака. Может кто-то сталкивался с данной задачей? Поделитесь опытом. Очень надеюсь получить любую информацию по данным вопросам. Заранее благодарю!
Offline Андрей *  
#2 Оставлено : 24 сентября 2020 г. 14:30:28(UTC)
Андрей *

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

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

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

1. Нет. Шифрования в ГОСТ-е при подписании нет.
2. Конечно, код доступен, подписание на стороне клиента выполняется -> правой кнопкой "исходный код страницы", а далее изучать html\js

Подписывать где собрались данные?
На клиенте (приложение (java...), сайт(javascript+плагин)) или на сервере (java приложение)?


Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#3 Оставлено : 24 сентября 2020 г. 14:33:29(UTC)
Андрей *

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

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

Сказал «Спасибо»: 380 раз
Поблагодарили: 1529 раз в 1175 постах
Автор: Zabava44 Перейти к цитате
Д или в какой директории в .jar-файле (samples-sources.jar) есть что-то подобное?


КриптоПро JCP, JavaTLS » Формирование подписи в формате PKCS#7
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
Zabava44 оставлено 24.09.2020(UTC)
Offline Zabava44  
#4 Оставлено : 24 сентября 2020 г. 14:54:04(UTC)
Zabava44

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

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

Сказал(а) «Спасибо»: 2 раз
Автор: Андрей * Перейти к цитате

Подписывать где собрались данные?
На клиенте (приложение (java...), сайт(javascript+плагин)) или на сервере (java приложение)?


На сервере; пишется небольшое proxy (на Spring Boot), которое принимает какое-то значение, подписывает его, и отдает в Честный знак.

За ссылку на подпись благодарю.
Offline Евгений Афанасьев  
#5 Оставлено : 24 сентября 2020 г. 16:09:27(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 19 раз
Поблагодарили: 572 раз в 543 постах
Здравствуйте.
В составе samples-sourcces.jar есть:
1) в пакете CAdES - высокоуровневые примеры создания CAdES-подписи с помощью CAdES.jar (CAdES-BES, T, Long Type 1);
2) в пакете CMS_samples - низкоуровневые примеры создания CMS-подписи: CMS, CMSSign, CMSVerify;
3) в пакете digital_marking - пример DigitalMarkingExample создания CAdES-подписи для ЧестныйЗнак.
thanks 3 пользователей поблагодарили Евгений Афанасьев за этот пост.
Zabava44 оставлено 24.09.2020(UTC), Андрей * оставлено 24.09.2020(UTC), axlminyaev оставлено 19.04.2021(UTC)
Offline Zabava44  
#6 Оставлено : 24 сентября 2020 г. 16:24:01(UTC)
Zabava44

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

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

Сказал(а) «Спасибо»: 2 раз
То, что нужно. Благодарю!
Offline 99percent6  
#7 Оставлено : 6 октября 2020 г. 9:47:53(UTC)
99percent6

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

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

Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
В составе samples-sourcces.jar есть:
1) в пакете CAdES - высокоуровневые примеры создания CAdES-подписи с помощью CAdES.jar (CAdES-BES, T, Long Type 1);
2) в пакете CMS_samples - низкоуровневые примеры создания CMS-подписи: CMS, CMSSign, CMSVerify;
3) в пакете digital_marking - пример DigitalMarkingExample создания CAdES-подписи для ЧестныйЗнак.


Добрый день, воспользовался примером из пакета digital_marking, подпись сформировалась, но валидацию в честном знаке она не проходит. Также я сверяю то, что у меня получилось с подписью, формируемой на тестовой странице - https://www.cryptopro.ru...ge/cades_bes_sample.html . Должны ли они совпадать, если подписываются одни и те же данные? У меня они различаются. При этом подпись, сформированная на тестовой странице, валидацию проходит.
Как понять что я делаю не так? Подскажите, пжл.

Моя подпись всегда начинается с символов - MIAG, а на тестовой странице - MIIb.

Код:

Код:

    public static void main(String[] args) throws Exception {
//        JCPInit.initProviders(false);
        Security.addProvider(new JCP());
        Security.addProvider(new RevCheck());
        byte[] encoded = Base64.getEncoder().encodeToString("Hello World".getBytes(StandardCharsets.UTF_8)).getBytes();
        byte[] sign = sign(
                "alias", // key alias
                "".toCharArray(), // key password
                encoded // data to be signed
        );

        Encoder encoder = new Encoder();
        System.out.println(encoder.encode((sign)));
    }

    public static byte[] sign(String alias, char[] password, byte[] data) throws Exception {

        KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);

        keyStore.load(null, null);

        PrivateKey privateKey = (PrivateKey)
                keyStore.getKey(alias, password);

        System.setProperty("com.sun.security.enableCRLDP", "true");
        System.setProperty("com.ibm.security.enableCRLDP", "true");

        System.setProperty("com.sun.security.enableAIAcaIssuers", "true");
        System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "true");

        Certificate[] certificates = keyStore
                .getCertificateChain(alias);

        List<X509Certificate> chain =
                new ArrayList<X509Certificate>();
        
        for (Certificate cert : certificates) {
            chain.add((X509Certificate) cert);
        }

        CAdESSignature cAdESSignature = new CAdESSignature(true);

        cAdESSignature.addSigner(
                JCP.PROVIDER_NAME, // signature provider // провайдер подписи
                JCP.GOST_DIGEST_2012_256_OID,
                JCP.GOST_PARAMS_EXC_2012_256_KEY_OID,
                privateKey, // signing key // ключ подписанта
                chain,      // signing certificate chain // цепочка сертификатов подписанта
                CAdESType.CAdES_BES,
                null,
                false,
                null,
                null,
                null, // no CRL files
                true  // add the signing certificate chain to the signature // добавить цепочку подписанта в подпись
        );

        ByteArrayOutputStream signatureStream
                = new ByteArrayOutputStream();

        try (signatureStream) {
            cAdESSignature.open(signatureStream);
            cAdESSignature.update(data);
            cAdESSignature.close();
        }

        return signatureStream.toByteArray();
    }

Отредактировано пользователем 6 октября 2020 г. 10:16:49(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#8 Оставлено : 6 октября 2020 г. 11:47:27(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 19 раз
Поблагодарили: 572 раз в 543 постах
Автор: 99percent6 Перейти к цитате
валидацию в честном знаке она не проходит.

Какую ошибку получаете?
Подписи будут разные.

Offline 99percent6  
#9 Оставлено : 6 октября 2020 г. 11:54:59(UTC)
99percent6

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

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

Автор: Евгений Афанасьев Перейти к цитате
Автор: 99percent6 Перейти к цитате
валидацию в честном знаке она не проходит.

Какую ошибку получаете?
Подписи будут разные.



Ошибка с такой формулировкой - Signature validation failed: message-digest attribute value does not match calculated value
Offline Евгений Афанасьев  
#10 Оставлено : 6 октября 2020 г. 15:07:58(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 19 раз
Поблагодарили: 572 раз в 543 постах
https://support.cryptopr...etsja-v-kriptoarmcryptcp
Может, в этом дело. Попробуйте указать для сообщения UTF-16LE, а не UTF-8.

Отредактировано пользователем 6 октября 2020 г. 15:08:50(UTC)  | Причина: Не указана

Offline 99percent6  
#11 Оставлено : 6 октября 2020 г. 15:45:17(UTC)
99percent6

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

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

Автор: Евгений Афанасьев Перейти к цитате
https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/106/12/pochemu-moja-otdeljonnja-podpis-iz-plgin-ne-proverjaetsja-v-kriptoarmcryptcp
Может, в этом дело. Попробуйте указать для сообщения UTF-16LE, а не UTF-8.


Вопрос решился, в итоге я убрал перевод тела запроса в base64 перед подписанием, удалил все пробелы из него и добавил экранирование, после этого валидация успешно прошла.
Спасибо за помощь.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.