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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline rmussalimov  
#11 Оставлено : 10 декабря 2019 г. 11:25:27(UTC)
rmussalimov

Статус: Активный участник

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

Сказал(а) «Спасибо»: 4 раз
Что я заметил, в примере CMSSign, метод createHashCMSEx есть возможность передать массив приватных ключей вместо одного. Очевидно, это сделано из-за того, что подпись может быть встроенная.

А сертификаты также добавляются, идет обход массива и добавление в cms.certificates.elements[i]

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

Offline Евгений Афанасьев  
#12 Оставлено : 10 декабря 2019 г. 11:51:59(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Автор: rmussalimov Перейти к цитате
Нужно добавить именно в подпись. И каким образом низкоуровневый ASN поймет, что включается вся цепочка вместо одного сертификата? Я ожидаю что-то наподобие этого https://stackoverflow.co...ms-container-in-c-sharp.
Просто addCertificate и все

Подпись ничего не знает о сертификатах, это просто средство их передачи. Как-то использовать сертификаты может только получающая/проверяющая сторона. Она может вообще не проверять подпись (тогда сертификат не нужен), проверять только подпись (тогда нужен сертификат подписи), строить цепочку (тогда нужна цепочка) или строить и проверять цепочку (тогда нужна цепочка и, возможно, CRL). Что класть в подпись, нужно обговаривать с проверяющей стороной (обычно на это есть документация и образцы). В примере, который вы привели, делается то же самое, что и вы: в certificates помещаются какие-то сертификаты. Проверяющая сторона должна по SID или signingCeritifcate понять, кто подписант, проверить подпись и построить для него (подписанта) цепочку (и, возможно, проверить ее).

Автор: rmussalimov Перейти к цитате
Что я заметил, в примере CMSSign, метод createHashCMSEx есть возможность передать массив приватных ключей вместо одного. Очевидно, это сделано из-за того, что подпись может быть встроенная.
А сертификаты также добавляются, идет обход массива и добавление в cms.certificates.elements[i]

В примере массив ключей соответствуют массиву сертификатов, это пары "ключ=сертификат", подписанты. В примере используется 1 ключ и 1 сертификат, т.е. 1 подписант, но можно передать 2 ключа и 2 сертификата, тогда это будут 2 подписанта. В примере для каждого подписанта кладется 1 сертификат, но сертификатов может быть и больше. В подписи раздел "сертификаты" (ceritificates) - это любые сертификаты, которые могут понадобиться для проверки подписи.

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

Offline rmussalimov  
#13 Оставлено : 10 декабря 2019 г. 12:10:42(UTC)
rmussalimov

Статус: Активный участник

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

Сказал(а) «Спасибо»: 4 раз
Понимаете в чем проблема:

Несмотря на то, что сертификаты очевидно добавляются (файл весит больше), проверяющие стороны, например, https://www.gosuslugi.ru/pgu/eds не видят, что сертификат подписанта был выдан промежуточным, они вообще его не видят никакие сертификаты, кроме подписанта (при загрузке открепленной подписи). Только если распарсить ASN, тогда можно понять то, что в подписи лежит еще один сертификат(-ы). В то же время, если подписать файл в КриптоПро CSP, то все хорошо, все сервисы видят все сертификаты

Мой первоначальный вопрос заключался в том как добавить сертификаты таким образом, чтобы проверяющая сторона знала, что Z был выдан Y, а Y был выдан X. Очевидно, что структура ASN должна отличаться. Но как именно и какие методы нужно вызывать - этого никто знать не может, кроме криптопро

Хотел сделать это программно, но, видимо, не судьба.

Если, например, сравнить это все с BC https://www.bouncycastle...SignedDataGenerator.html

То у них все работает верхнеуровнево - в gen.addCertificates(certs); в лист certs просто добавляем нужные сертификаты от меньшего к большему и цепь строится (но это не точно)

Отредактировано пользователем 10 декабря 2019 г. 12:17:31(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#14 Оставлено : 10 декабря 2019 г. 12:33:25(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Высокоуровневое API - это, например, использовать CAdES.jar и его примеры в CAdES-пакете. У него в методе addSigner есть параметр addCertificateChain для включения цепочки сертификатов в подпись. Документация в CAdES-javadoc.jar в папке javadoc дистрибутива. Или вместо addSigner с параметром addCertificateChain использовать setCertificateStore. Отличие его от первого варианта в том, что addCertificateChain добавляет цепочку подписанта, а с помощью setCertificateStore можно добавить любые сертификаты.
В <JRE>/lib/security/cacerts потребуется добавить корневой сертификат цепочки подписанта.

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

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