Статус: Активный участник
Группы: Участники
Зарегистрирован: 05.08.2019(UTC) Сообщений: 65
Сказал(а) «Спасибо»: 4 раз
|
Что я заметил, в примере CMSSign, метод createHashCMSEx есть возможность передать массив приватных ключей вместо одного. Очевидно, это сделано из-за того, что подпись может быть встроенная. А сертификаты также добавляются, идет обход массива и добавление в cms.certificates.elements[i] Отредактировано пользователем 10 декабря 2019 г. 11:26:11(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Автор: rmussalimov  Подпись ничего не знает о сертификатах, это просто средство их передачи. Как-то использовать сертификаты может только получающая/проверяющая сторона. Она может вообще не проверять подпись (тогда сертификат не нужен), проверять только подпись (тогда нужен сертификат подписи), строить цепочку (тогда нужна цепочка) или строить и проверять цепочку (тогда нужна цепочка и, возможно, 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)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Высокоуровневое 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)
| Причина: Не указана |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close