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

Уведомление

Icon
Error

3 Страницы<123>
Опции
К последнему сообщению К первому непрочитанному
Offline ld401  
#11 Оставлено : 23 апреля 2020 г. 7:29:49(UTC)
ld401

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

Группы: Участники
Зарегистрирован: 23.03.2020(UTC)
Сообщений: 4

Автор: Евгений Афанасьев Перейти к цитате
При создании подписи пока только проверка онлайн, при проверке подписи можно в verify передать CRL.


Добрый день

У меня такая же проблема, надо сделать подпись, CRL есть только файлы.

Собственно вопрос такой, может сейчас в более новых версиях можно ?
Если да, то как.
Online Евгений Афанасьев  
#12 Оставлено : 23 апреля 2020 г. 13:33:41(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
Вы хотите создать подпись, используя для проверки при создании файлы CRL (offline), а не enableCRLDP (online)?
Да, есть метод addSigner с расширенными параметрами, предпоследний, кажется, у функции с наибольшим набором аргументов (см. javadoc/CAdES-javadoc, класс CAdESSignature). Туда можно передать набор X509CRL, они будут использованы при создании подписи (enableCRLDP при этом можно не задавать true).

Отредактировано пользователем 23 апреля 2020 г. 13:34:20(UTC)  | Причина: Не указана

Offline wwpp1  
#13 Оставлено : 3 августа 2020 г. 13:08:17(UTC)
wwpp1

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

Группы: Участники
Зарегистрирован: 30.07.2020(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 4 раз
коллеги, прошу помощи.
не могу побороть ошибку ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target

вот такие настройки в классе SignerData
Код:

public class SignerData {

    final static private String cer_story = "FloppyStore";
    final static private String cer_alias = "te-bff6167b-6910-4b8c-adf5-d278f80480a7";
    final static private String cer_pass_str = "1";
    final static private char[] cer_pass = cer_pass_str.toCharArray();



вот так выглядит main
Код:

 static {
        // Включаем возможность онлайновой проверки.
        System.setProperty("com.sun.security.enableCRLDP", "true");
        System.setProperty("com.ibm.security.enableCRLDP", "true");
        System.setProperty("com.sun.security.enableAIAcaIssuers", "true");
    }


    public static void main(String[] args) throws Exception {
        try {
            Security.addProvider(new JCP());
            Security.addProvider(new RevCheck());
            String result = SignerData.signed("string");
            System.out.print(result);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


ключи на флешке, в cacert добавлен целевой сертификат и тестового уц2.0
keytool.exe -list показывает что в cacert есть сертификат, указанный в cer_alias и есть сертификат тестового уц2.0 (файл приаттачил)
спасибо за помощь!

log.log (10kb) загружен 4 раз(а).
list.txt (134kb) загружен 4 раз(а).

Online Евгений Афанасьев  
#14 Оставлено : 3 августа 2020 г. 13:26:39(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
Ошибка говорит о том, что не может быть построена цепочка сертификатов для заданного сертификата.
В log.log сертификат, для которого строится цепочка:
Код:

serial: 2a5dd8300c7abda884f5244533d1dd36e
subject: CN=ИП XXX, SURNAME=XXX, GIVENNAME=XXX, C=RU, L=XXX, STREET="г XXX, ул XXX, д XXX, кв XXX", OID.1.2.643.100.1=#120D33313736363538303032323532, OID.1.2.643.3.131.1.1=#120C363636323033313836333536, EMAILADDRESS=starikovandrey1@yahoo.com
issuer: CN="Тестовый подчиненный УЦ ООО \"КРИПТО-ПРО\" ГОСТ 2012 (УЦ 2.0)", O="ООО \"КРИПТО-ПРО\"", STREET=ул. Сущёвский вал д. 18, L=Москва, ST=77 Москва, C=RU, OID.1.2.643.3.131.1.1=#120C303037373137313037393931, OID.1.2.643.100.1=#120D31303337373030303835343434, EMAILADDRESS=info@cryptopro.ru
not before: Tue May 26 10:50:07 MSK 2020
not after: Wed Aug 26 11:00:07 MSK 2020

В list.txt есть он же и еще один со словом "КРИПТО-ПРО", как в issuer:
Код:

Owner: 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
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
Serial number: 124d455d1500ba80e4114dd112cfb4dd
Valid from: Mon Mar 23 14:15:11 MSK 2015 until: Wed Mar 23 14:15:11 MSK 2022

При условии, что
А) промежуточный сертификат вы не передаете в коде (это не видно по тому коду, что приложен);
Б) промежуточный сертификат не добавлен в cacerts;
В) промежуточный сертификат будет скачан по ссылке из сертификата (в сертификате подписи есть ссылка на промежуточный + есть доступ в сеть);
возможно, корневым является не CN="Тестовый УЦ ООО \"КРИПТО-ПРО\" (УЦ 2.0)", а другой сертификат.

Если вы использовали http://testca2012.cryptopro.ru/ui/ то
* промежуточный - http://testca2012.cryptopro.ru/cert/subca.cer
* корневой - http://testca2012.cryptopro.ru/cert/rootca.cer т.е. [CN = Тестовый головной УЦ ООО "КРИПТО-ПРО" ГОСТ 2012 (УЦ 2.0)], а не [CN="Тестовый УЦ ООО \"КРИПТО-ПРО\" (УЦ 2.0)"].

Отредактировано пользователем 3 августа 2020 г. 13:27:43(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
wwpp1 оставлено 03.08.2020(UTC)
Offline wwpp1  
#15 Оставлено : 3 августа 2020 г. 14:11:44(UTC)
wwpp1

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

Группы: Участники
Зарегистрирован: 30.07.2020(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 4 раз
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Ошибка говорит о том, что не может быть построена цепочка сертификатов для заданного сертификата.
В log.log сертификат, для которого строится цепочка:
Код:

serial: 2a5dd8300c7abda884f5244533d1dd36e
subject: CN=ИП XXX, SURNAME=XXX, GIVENNAME=XXX, C=RU, L=XXX, STREET="г XXX, ул XXX, д XXX, кв XXX", OID.1.2.643.100.1=#120D33313736363538303032323532, OID.1.2.643.3.131.1.1=#120C363636323033313836333536, EMAILADDRESS=starikovandrey1@yahoo.com
issuer: CN="Тестовый подчиненный УЦ ООО \"КРИПТО-ПРО\" ГОСТ 2012 (УЦ 2.0)", O="ООО \"КРИПТО-ПРО\"", STREET=ул. Сущёвский вал д. 18, L=Москва, ST=77 Москва, C=RU, OID.1.2.643.3.131.1.1=#120C303037373137313037393931, OID.1.2.643.100.1=#120D31303337373030303835343434, EMAILADDRESS=info@cryptopro.ru
not before: Tue May 26 10:50:07 MSK 2020
not after: Wed Aug 26 11:00:07 MSK 2020

В list.txt есть он же и еще один со словом "КРИПТО-ПРО", как в issuer:
Код:

Owner: 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
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
Serial number: 124d455d1500ba80e4114dd112cfb4dd
Valid from: Mon Mar 23 14:15:11 MSK 2015 until: Wed Mar 23 14:15:11 MSK 2022

При условии, что
А) промежуточный сертификат вы не передаете в коде (это не видно по тому коду, что приложен);
Б) промежуточный сертификат не добавлен в cacerts;
В) промежуточный сертификат будет скачан по ссылке из сертификата (в сертификате подписи есть ссылка на промежуточный + есть доступ в сеть);
возможно, корневым является не CN="Тестовый УЦ ООО \"КРИПТО-ПРО\" (УЦ 2.0)", а другой сертификат.

Если вы использовали http://testca2012.cryptopro.ru/ui/ то
* промежуточный - http://testca2012.cryptopro.ru/cert/subca.cer
* корневой - http://testca2012.cryptopro.ru/cert/rootca.cer т.е. [CN = Тестовый головной УЦ ООО "КРИПТО-ПРО" ГОСТ 2012 (УЦ 2.0)], а не [CN="Тестовый УЦ ООО \"КРИПТО-ПРО\" (УЦ 2.0)"].


в итоге не хватало корневого сертификата. установил, работает.
спасибо за помощь!
Offline wwpp1  
#16 Оставлено : 3 августа 2020 г. 17:04:32(UTC)
wwpp1

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

Группы: Участники
Зарегистрирован: 30.07.2020(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 4 раз
Коллеги, еще вопрос. при формировании прикрепленной подписи, получаю строку, которая много меньше, нежели сформированная с помощью https://cryptopro.ru/sit...ge/cades_bes_sample.html

Если раскодировать base64, полученный от плагина, видно что внутри прикреплена цепочка сертификатов.
в чем может быть проблема, что keyStore.getCertificateChain( cer_alias ) не отдает цепочку, а только 1 сертификат?
Код:

final static private String cer_story = "FloppyStore";
    final static private String cer_alias = "te-bff6167b-6910-4b8c-adf5-d278f80480a7";
    final static private String cer_pass_str = "1";
    final static private char[] cer_pass = cer_pass_str.toCharArray();

    static public String signed(String data) throws IOException, KeyStoreException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException, CAdESException, InvalidKeyException, SignatureException {
        final byte src[] = data.getBytes();

        KeyStore keyStore = KeyStore.getInstance( cer_story );
        keyStore.load( null, null );
        PrivateKey privateKey = (PrivateKey) keyStore.getKey( cer_alias, cer_pass );
        X509Certificate cert = (X509Certificate) keyStore.getCertificate( cer_alias );

        List chain = Arrays.asList( keyStore.getCertificateChain( cer_alias ) );

        CAdESSignature cadesSignature = new CAdESSignature( true );
        // Создаем подписанта CAdES-BES.
        cadesSignature.addSigner( JCP.PROVIDER_NAME, privateKey, chain, CAdESType.CAdES_BES, null, false );
        // Будущая подпись в виде массива.
        ByteArrayOutputStream signatureStream = new ByteArrayOutputStream();
        // Подготовка контекста.
        cadesSignature.open( signatureStream );
        // Хеширование.
        cadesSignature.update( src );
        // Создание подписи с выводом в signatureStream.
        cadesSignature.close();
        signatureStream.close();
        // Получаем подпись в виде массива.
        byte[] cadesCms = signatureStream.toByteArray();

        return new String(cadesCms)  ;
    }

в логах видно, что сертификаты по цепочке были, но в данные не прикрепились. в чем может быть причина?

спасибо!

прикрепил содержимое keytool.exe -list
и логи при запуске программы
l.log (28kb) загружен 1 раз(а). list.txt (143kb) загружен 1 раз(а).
Online Евгений Афанасьев  
#17 Оставлено : 3 августа 2020 г. 18:24:22(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Проблема не в том, что getCertificate Chain отдает 1 сертификат, эта функция просто читает сертификат из контейнера (видимо, у вас 1 сертификат в контейнере), дальше цепочка достраивается в addSigner.
Посмотрите описание функций addSigner в javadoc/cadesapi-javadoc.jar в дистрибутиве, одна из addSigner принимает последним параметром boolean addCertificateChain, который означает включение всей цепочки в подпись при её создании. Используйте этот параметр.
Offline wwpp1  
#18 Оставлено : 20 августа 2020 г. 13:15:06(UTC)
wwpp1

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

Группы: Участники
Зарегистрирован: 30.07.2020(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 4 раз
Автор: Евгений Афанасьев Перейти к цитате
Проблема не в том, что getCertificate Chain отдает 1 сертификат, эта функция просто читает сертификат из контейнера (видимо, у вас 1 сертификат в контейнере), дальше цепочка достраивается в addSigner.
Посмотрите описание функций addSigner в javadoc/cadesapi-javadoc.jar в дистрибутиве, одна из addSigner принимает последним параметром boolean addCertificateChain, который означает включение всей цепочки в подпись при её создании. Используйте этот параметр.


Добрый день!
А как сделать в построение цепочки, если использовать версию jcp-2.0.39014
там методов addSigner меньше и нет метода, который включит всю цепочку.

Спасибо!
Online Евгений Афанасьев  
#19 Оставлено : 20 августа 2020 г. 13:18:31(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
Версия 39014 выпущена почти 4 года назад, в ней нет методов с указанным выше параметром. Сертификаты можно добавить только с помощью setCertificateStore(<список_сертификатов>) до создания подписи.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
wwpp1 оставлено 27.08.2020(UTC)
Offline wwpp1  
#20 Оставлено : 27 августа 2020 г. 11:32:52(UTC)
wwpp1

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

Группы: Участники
Зарегистрирован: 30.07.2020(UTC)
Сообщений: 8

Сказал(а) «Спасибо»: 4 раз
Коллеги, прощу помощи.


формирую подпись данных, для отправки в црпт.
для подписания требуют открепленную подпись.
в документации звучит так: "signature": "<Открепленная УКЭП формата base64>"

в коде делаю так, где detached=false:

Код:

        CAdESSignature cadesSignature = new CAdESSignature(detached);
        cadesSignature.setCertificateStore(config.getCertificateStore());

        cadesSignature.addSigner(config.getProviderName(),
                config.getDigestOid(),
                config.getPublicKeyOid(),
                config.getPrivateKey(),
                config.getChain(),
                CAdESType.CAdES_BES,
                null,
                false,
                config.getSignedAttributes(),
                config.getUnsignedAttributes(),
                config.getCRLs(),
                true); img_2.jpg (28kb) загружен 14 раз(а). img_1.jpg (55kb) загружен 14 раз(а).

        return cadesSignature;


далее данные отправляются в црпт, но там говорит, что "не пройдена проверка подписи", img_1.jpg (55kb) загружен 14 раз(а).

для того чтобы проверить себя, сохранил документ и подпись в файлы, и проверил на https://crypto.kontur.ru/
в итоге получил ответ, что подпись для документа валидная, на скрине img_2.jpg (28kb) загружен 14 раз(а). виден ответ валидации.

помогите понять, что не так.
еще смущает на скрине надпись RU, null сразу после подписи.

возможно нужно добавлять какие-то атрибуты к подписи или еще что-то? даже не знаю что еще предположить.

Заранее спасибо за помощь!

к сообщению прикладываю файлы:
sign_log.log (24kb) загружен 3 раз(а). - логи java в процессе подписания
data.json.sig.txt (7kb) загружен 5 раз(а). - подпись
data.json.txt (1kb) загружен 3 раз(а). - данные
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
3 Страницы<123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.