Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2016(UTC) Сообщений: 108
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2016(UTC) Сообщений: 108
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
Подпись формата CADES BES тоже получается, т.е. подписантом выступает сервис штампа времени.
Возможно ли включить в подпись CryptoproPDF штамп времени используя CryptoPro JCP, чтобы в свойствах подписи была активна кнопка штампа времени - а не "Дата и время создания подписи взяты с часов на компьютере подписанта".
Неужели никто не делал? Разработчики помогите пожалуйста - есть ли такая возможность?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2016(UTC) Сообщений: 108
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Здравствуйте. Автор: lartok Можно ли добавить этот штамп времени? Можно добавить, создав CAdES-T или поместив штамп в неподписанные атрибуты. Но как он будет отображаться и к какой кнопке привязан в свойствах подписи (кнопка с датой - подписанный атрибут signingTime) - лучше спросить в разделе CryptoPro PDF, возможно, так подскажут. |
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
lartok оставлено 19.02.2018(UTC)
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2016(UTC) Сообщений: 108
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
Автор: afev Здравствуйте. Автор: lartok Можно ли добавить этот штамп времени? Можно добавить, создав CAdES-T или поместив штамп в неподписанные атрибуты. Код: //////////////TIME/////////////////
cms.signerInfos.elements[0].unsignedAttrs = new UnsignedAttributes(1);
cms.signerInfos.elements[0].unsignedAttrs.elements[0] = new Attribute(new OID("1.2.840.113549.1.9.5").value,
new Attribute_values(1));
final Time time = new Time();
final Asn1UTCTime UTCTime = new Asn1UTCTime();
UTCTime.setTime(Calendar.getInstance());
time.set_utcTime(UTCTime);
cms.signerInfos.elements[0].unsignedAttrs.elements[0].values.elements[0] = time.getElement();
///////////////TIME////////////////
Можно как-то добавить ответ от TSA службы или это только формат CAdES-T?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
В вашем примере в список неподписанных атрибутов unsignedAttrs помещается signingTime (обычно подписанный это атрибут, помещаемый в signedAttrs). Получение штампа потребуется реализовать самостоятельно (формирование запроса, отправка, получение ответа) либо использовать CAdES.jar и формирование CAdES-T подписи. Отредактировано пользователем 20 февраля 2018 г. 13:45:20(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2016(UTC) Сообщений: 108
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
Автор: afev В вашем примере в список неподписанных атрибутов unsignedAttrs помещается signingTime (обычно подписанный это атрибут, помещаемый в signedAttrs). Получение штампа потребуется реализовать самостоятельно (формирование запроса, отправка, получение ответа) либо использовать CAdES.jar и формирование CAdES-T подписи. Код: Calendar cal = Calendar.getInstance();
TSAClientBouncyCastle tsaClient = new TSAClientBouncyCastle(tsa_url);
byte[] respBytes=tsaClient.getTimeStampToken(data);
TimeStampResponse response = new TimeStampResponse(respBytes);
cal.setTime(response.getTimeStampToken().getTimeStampInfo().getGenTime());
final Time time = new Time();
final Asn1UTCTime UTCTime = new Asn1UTCTime();
UTCTime.setTime(cal);
time.set_utcTime(UTCTime);
cms.signerInfos.elements[0].unsignedAttrs.elements[0].values.elements[0] = time.getElement();
Что-то в этом роде? Или вы имеете ввиду добавить время подписи в подписанные атрибуты? Может быть еще подскажите можно ли и как присвоить: Код:cms.signerInfos.elements[0].signedAttr = (TimeStampResponse)response.getTimeStampToken().getSignedAttributes()
Отредактировано пользователем 20 февраля 2018 г. 14:11:50(UTC)
| Причина: Дополнение
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
В неподписанные атрибуты целиком штамп помещается с соответствующим oid'ом (signature-timestamp - штамп на подпись, то есть на signature размером 64 или 128 байт). tsaClient должен мочь сформировать хеш (imprint) с данных (в этом случае - с подписи signature размером 64 или 128 байт). На счет Код:
cms.signerInfos.elements[0].signedAttr = (TimeStampResponse)response.getTimeStampToken().getSignedAttributes()
не уверен, т.к. это разные классы, разные сущности, и не совсем понятно, зачем в подписанные атрибуты подписи помещать подписанные атрибуты штампа. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 27.04.2016(UTC) Сообщений: 108
Сказал(а) «Спасибо»: 9 раз Поблагодарили: 1 раз в 1 постах
|
Автор: afev В неподписанные атрибуты целиком штамп помещается с соответствующим oid'ом (signature-timestamp - штамп на подпись, то есть на signature размером 64 или 128 байт). tsaClient должен мочь сформировать хеш (imprint) с данных (в этом случае - с подписи signature размером 64 или 128 байт). На счет Код:
cms.signerInfos.elements[0].signedAttr = (TimeStampResponse)response.getTimeStampToken().getSignedAttributes()
не уверен, т.к. это разные классы, разные сущности, и не совсем понятно, зачем в подписанные атрибуты подписи помещать подписанные атрибуты штампа. соответствующий oid - "1.2.840.113549.1.9.16.2.14", видимо это так // RFC 3161 id-aa-timeStampToken штамп получаю так: Код: final Signature signature =
Signature.getInstance(JCP.GOST_EL_SIGN_NAME);
signature.initSign(key);
signature.update(data);
final byte[] sign = signature.sign();
byte[] tsImprint = MessageDigest.getInstance(tsaClient.getDigestAlgorithm()).digest(sign);
byte[] tsToken = tsaClient.getTimeStampToken(tsImprint);
без примеров очень трудно - т.к. я не сижу на Java. До этого наверно все правильно идет - поправьте пожалуйста если нет. Теперь как вписать это в cms.signerInfos.elements[0].unsignedAttrs ума не приложу - примерчик бы. Или это все неправильно - в теме "КриптоПро PDF" молчат.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 3,963 Откуда: Крипто-Про Сказал(а) «Спасибо»: 20 раз Поблагодарили: 704 раз в 665 постах
|
Формируете как будто правильно. Добавление неподписанных выполняется по аналогии с подписанными (пример с последними есть в CMSSign, пакет CMS, архив samples-sources), только используется unsignedAttrs = new UnsignedAttributes(<количество>) c заполнением элементов или сразу с передачей в new UnsignedAttributes(<атрибуты>) атрибутов, примерно: Код:
cms.signerInfos.elements[<n>].unsignedAttrs = new UnignedAttributes(1);
cms.signerInfos.elements[<n>].signedAttrs.elements[0] = new Attribute(<1.2.840.113549.1.9.16.2.14>, new Attribute_values(1));
Asn1Type value = new Asn1OctetString(<timestamp>);
cms.signerInfos.elements[<n>].unsignedAttrs.elements[0].values.elements[0] = value;
|
|
1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
lartok оставлено 21.02.2018(UTC)
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close