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

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline CryptoPro_FanBoy  
#1 Оставлено : 26 сентября 2019 г. 22:44:14(UTC)
CryptoPro_FanBoy

Статус: Участник

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

Сказал(а) «Спасибо»: 3 раз
Здравствуйте!
jcp-2.0.40035
Создаю отсоединенную подпись в формате Cades_bes, используя пример в руководстве программиста (ЖТЯИ.00102-01 96 02. Руководство программиста. JavaCSP). Файл с подписью создается, даже успешно проверяется указанным в том же примере способом.
1.PNG (8kb) загружен 29 раз(а).
Но при попытке проверить данную подпись на сервере, возникает ошибка: "Произошла ошибка при проверке документа. В сообщении не найден сертификат подписи". Использовал всевозможные варианты задания формата подписи и параметров
2.PNG (19kb) загружен 18 раз(а).
При создании прикрепленной подписи ситуация аналогичная

Прошу указать мне, что я делаю не так. Прикрепляю свой код, логи создания и проверки подписи, файл подписи(pdf.txt, файл .bin не дает загрузить) и исходный документ. Заранее спасибо!
Код
Код:
private static void Cades(PrivateKey privateKey, X509Certificate[] chain, String tsaUrl) throws CAdESException, IOException {
        //Создание
        CAdESSignature cAdESSignature = new CAdESSignature(true);
        cAdESSignature.addSigner("JCP",
                JCP.GOST_DIGEST_2012_256_OID,
                JCP.GOST_PARAMS_EXC_2012_256_KEY_OID,
                privateKey,
                Arrays.asList(chain),
                CAdESType.CAdES_BES,
                /*tsaUrl,*/ null,
                false);
        byte[] data;
        File file = new File("C:\\Work\\HDImageStore\\PDF\\a\\pdf.pdf");
        data = Files.readAllBytes(Paths.get(file.getAbsolutePath()));
        ByteArrayOutputStream signatureStream = new ByteArrayOutputStream();
        cAdESSignature.open(signatureStream);
        cAdESSignature.update(data);
        cAdESSignature.close();
        System.out.println(cAdESSignature);
        byte[] cadesCMS = signatureStream.toByteArray();
        OutputStream os = new FileOutputStream("pdf.bin");
        signatureStream.close();
        os.write(cadesCMS);
        os.close();

        //ПРОВЕРКА
        FileInputStream cades = new FileInputStream("pdf.bin");
        CAdESSignature signature = new CAdESSignature(cades, new FileInputStream(file), CAdESType.CAdES_BES);
        signature.verify(Arrays.asList(chain)); 
}
log.txt (128kb) загружен 4 раз(а). pdf.pdf (424kb) загружен 4 раз(а). pdf.txt (1kb) загружен 3 раз(а).
Offline Санчир Момолдаев  
#2 Оставлено : 26 сентября 2019 г. 23:03:30(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
Добрый день!
попробуйте так:
Код:
        ...
        Certificate[] chain = keyStore.getCertificateChain(ALIAS);
        X509Certificate[] xChain = new X509Certificate[chain.length];
        System.arraycopy(chain, 0, xChain, 0, chain.length);
        Collection<X509CertificateHolder> certHolders = new ArrayList<X509CertificateHolder>(chain.length);
        for (Certificate cert : chain) {
            certHolders.add(new X509CertificateHolder(cert.getEncoded()));
        }
        CollectionStore store = new CollectionStore(certHolders);
        ByteArrayOutputStream signature = new ByteArrayOutputStream();
        CAdESSignature cAdESSignature = new CAdESSignature(true);
        cAdESSignature.addSigner(
        ...
        );
        cAdESSignature.open(signature);
        cAdESSignature.update(data);
        cAdESSignature.setCertificateStore(store);
        ...

Отредактировано пользователем 27 сентября 2019 г. 3:30:39(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
CryptoPro_FanBoy оставлено 27.09.2019(UTC)
Offline CryptoPro_FanBoy  
#3 Оставлено : 27 сентября 2019 г. 11:30:25(UTC)
CryptoPro_FanBoy

Статус: Участник

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

Сказал(а) «Спасибо»: 3 раз
Большое спасибо! Теперь всё проверяется.
photo_2019-09-27_10-36-34.jpg (54kb) загружен 19 раз(а).
Однако теперь возникает проблема при попытки подписать тот же документ подписью CAdES_X_Long_Type_1.
Ошибок сразу несколько:

  • java.security.GeneralSecurityException: java.security.InvalidKeyException: Алгоритм ключа не соответствует алгоритму подписи.
  • ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
  • Error building certification path for <данные сертификата>: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target; error codes: [33] 'PKIX failure: invalid parameters of certificate'
  • org.bouncycastle.cms.CMSAttributeTableGenerationException: The signer certificate: <Данные сертификата> must have OCSP evidence but it doesn't contain any OCSP reference(s) or service(s) is(are) unavailable. OCSP evidence is not found


Изначально думал, что проблема с доступом к ocsp службе или в её работе, т.к. cades_bes строился без указанных выше ошибок. Проверил ответ от ocsp службы с помощью утилиты ocsputil. Результат:
4.PNG (14kb) загружен 14 раз(а).

В чем теперь может быть проблема - неизвестно. Прошу помощи.
Заранее спасибо!

log (2).txt (188kb) загружен 6 раз(а).

Отредактировано пользователем 27 сентября 2019 г. 11:32:26(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 27 сентября 2019 г. 12:54:16(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
1. Провайдер Java CSP задан провайдером по умолчанию в панели управления JCP?
2. В сертификате подписанта есть ссылка на OCSP сервис?
Offline CryptoPro_FanBoy  
#5 Оставлено : 27 сентября 2019 г. 14:56:03(UTC)
CryptoPro_FanBoy

Статус: Участник

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

Сказал(а) «Спасибо»: 3 раз
Автор: Евгений Афанасьев Перейти к цитате
Провайдер Java CSP задан провайдером по умолчанию в панели управления JCP?

Стоял JCP, поменял на Java CSP, попробовал снова - ничего не изменилось.

Автор: Евгений Афанасьев Перейти к цитате
В сертификате подписанта есть ссылка на OCSP сервис?

Тут я не совсем уверен.
Snimok.PNG (233kb) загружен 15 раз(а).
Слева на скриншоте - сертификат, открытый контейнере в панели управления, справа - свойства .cer этого же сертификата. Думаю, что есть.

Здесь ведь находится ссылка:
Цитата:
FINER: Searching for extension by id 1.3.6.1.5.5.7.48.1 in certificate: <Данные сертификата>
сен 27, 2019 2:33:04 PM ru.CryptoPro.AdES.tools.AdESUtility getAccessor
FINER: Found: 1 OCSP url(s).



Проблема может быть в несоответствии параметров подписи в коде и в панели управления?

Этих:
Код:
cAdESSignature.addSigner("JCP",
                    JCP.GOST_DIGEST_2012_256_OID,
                    JCP.GOST_PARAMS_EXC_2012_256_KEY_OID,
                    privateKey,
                    Arrays.asList(chain),
                    CAdESType.CAdES_X_Long_Type_1,
                    tsaUrl,  
                    false);


И этих:
6.PNG (25kb) загружен 17 раз(а).
Offline Санчир Момолдаев  
#6 Оставлено : 27 сентября 2019 г. 15:47:32(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
у вас цепочка ocsp строится по 2001 госту
сам сертификат по 2012 госту
tsp по 2012 госту.

попробуйте только с 2012, причем чтобы сертификат оператора ocsp был выпущен тем же ключом ЦС что и сертификат пользователя.
Техническую поддержку оказываем тут
Наша база знаний
Offline CryptoPro_FanBoy  
#7 Оставлено : 27 сентября 2019 г. 15:58:51(UTC)
CryptoPro_FanBoy

Статус: Участник

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

Сказал(а) «Спасибо»: 3 раз
Автор: Санчир Момолдаев Перейти к цитате
у вас цепочка ocsp строится по 2001 госту
сам сертификат по 2012 госту
tsp по 2012 госту.

попробуйте только с 2012, причем чтобы сертификат оператора ocsp был выпущен тем же ключом ЦС что и сертификат пользователя.


Подскажите, пожалуйста, где можно задать параметры для цепочки ocsp, вроде везде стоит 2012 гост, и в коде, и в панели управления (Где Вы вообще это увидели?).

Отредактировано пользователем 27 сентября 2019 г. 16:02:43(UTC)  | Причина: Не указана

Offline Санчир Момолдаев  
#8 Оставлено : 27 сентября 2019 г. 16:35:19(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
base64 представление в логе.
там и сертификаты и ocsp и tsp ответы.
адрес ocsp берется из расширения сертификата. уточните у вашего уц есть ли ocsp служба по 2012 госту.
если есть, переиздайте сертификат с правильной ссылкой на ocsp службу с сертификатом по 2012 госту
Техническую поддержку оказываем тут
Наша база знаний
Offline Санчир Момолдаев  
#9 Оставлено : 27 сентября 2019 г. 16:37:08(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 223 раз в 211 постах
base64 представление в логе.
там и сертификаты и ocsp и tsp ответы.
адрес ocsp берется из расширения сертификата. уточните у вашего уц есть ли ocsp служба по 2012 госту.
если есть, переиздайте сертификат с правильной ссылкой на ocsp службу с сертификатом по 2012 госту
Техническую поддержку оказываем тут
Наша база знаний
Offline CryptoPro_FanBoy  
#10 Оставлено : 27 сентября 2019 г. 16:44:42(UTC)
CryptoPro_FanBoy

Статус: Участник

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

Сказал(а) «Спасибо»: 3 раз
Автор: Санчир Момолдаев Перейти к цитате
base64 представление в логе.
там и сертификаты и ocsp и tsp ответы.
адрес ocsp берется из расширения сертификата. уточните у вашего уц есть ли ocsp служба по 2012 госту.
если есть, переиздайте сертификат с правильной ссылкой на ocsp службу с сертификатом по 2012 госту


Но я ведь проверял (скриншот выше) этот же сертификат с помощью ocsputil по этому же адресу службы, там ответ успешный. Думаю, что если бы дело было в службе или в сертификате - вернулась бы ошибка. Ошибаюсь?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.