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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline vldpyatkov  
#1 Оставлено : 29 февраля 2016 г. 16:26:36(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
Обычно я проверял валидность подписей вот так:

Код:

  CAdESSignature cadesSignature = new CAdESSignature(cadesCmsStream, dataStream, CAdESType.CAdES_X_Long_Type_1);
  cadesSignature.verify(null);


И это работало пока cadesCmsStream приходил мне из КриптоПро Brouser Plugin.
Ну вот мне прислали подписи в файлах .sng, теперь я получаю ошибку при проверки: The signer has no any unsigned attribute but the signature decoder is null
У вас есть сервис для проверки sgn-файлов.

Прикладываю файл данных и .sng файл, на которых я проверял: arch.zip (5kb) загружен 9 раз(а).

Пробовал достать сертификат и запихнуть при проверки (ошибка не поменялась):

Код:

cadesSignature.verify(Arrays.asList(new PKCS7(signature).getCertificates()))


Посмотрел пример (CAdES.PKCS7Example). Попробовал сделать так:

Код:

  CAdESSignature cadesSignature = new CAdESSignature(cadesCmsStream, dataStream, null);
  cadesSignature.verify(Arrays.asList(new PKCS7(signature).getCertificates()));


Ошибка поменялась: Invalid certificate chain

Мне нужно уметь одинаково хранить и те подписи которые BrouserPlugin формирует и те что присылает клиент в .sgn файлах.

Можно ли как-то извлечь из .sgn файла байты подписи для CAdESSignature?

Может нужна какая-то дополнительная информация, чтобы вы могли понять проблему?

Отредактировано пользователем 1 марта 2016 г. 16:37:31(UTC)  | Причина: Добавил варианты проверки

Offline Евгений Афанасьев  
#2 Оставлено : 2 марта 2016 г. 9:56:01(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: vldpyatkov Перейти к цитате
The signer has no any unsigned attribute

Вероятно, это не подпись CAdES-X Long Type 1.
Автор: vldpyatkov Перейти к цитате
Invalid certificate chain

Что за класс PKCS7? Какая вероятность, что он возвращает сертификат подписи в getCertificates()?
Автор: vldpyatkov Перейти к цитате
Можно ли как-то извлечь из .sgn файла байты подписи для CAdESSignature?

Если подпись получена с помощью плагина, то это подпись формата CAdES, это и есть .sgn, не нужно извлекать.

Отредактировано пользователем 2 марта 2016 г. 9:59:43(UTC)  | Причина: Не указана

Offline vldpyatkov  
#3 Оставлено : 2 марта 2016 г. 10:36:29(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
Цитата:
Вероятно, это не подпись CAdES-X Long Type 1.

Да вы правы, та подпись что я приложил CAdES-BES
Цитата:
Что за класс PKCS7?

Это объект из sun.security.pkcs.PKCS7 (я воспользовался для проверки подписи вот этой темой на форуме)
Цитата:
Если подпись получена с помощью плагина, то это подпись формата CAdES, это и есть .sgn, не нужно извлекать.

К сожалению эта подпись не создана плагином, но она проходит проверку на вашем сервисе (т.е. там гостовский алгоритм подписывания). Поскольку при вызове:

Код:
 new CAdESSignature(cadesCmsStream, dataStream, null) 


небыли найдены сертификаты в этом формате (.sgn) они хранятся отлично от CAdES.

Также там оказались подписи CAdES-T, которые невозможно проверить с помощью CAdES.jar.
Может вы укажите на какую-нибудь документацию, которая позволит определить тип подписи и проверить его соответственно?
Или как-то сориентируете меня, чтобы я мог делать дальнейшие шаги?
Offline Евгений Афанасьев  
#4 Оставлено : 2 марта 2016 г. 11:16:09(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Тогда нужно проверить, как, например,
Код:

... = new CAdESSignature(cadesCmsStream, dataStream, null);


Если вы имеете дело с CAdES.jar из 1.0.54, то там еще не было возможности извлекать сертификат подписи из самой подписи при проверке, его можно было только передать в verify, хотя при этом сертификат вложен в подпись. Поэтому нужно сертификат подписи подавать отдельно (или все цепочку) в функцию verify. В дальнейшем были сделаны доработки, которые попали в JCP 2.0.
Кроме того, корневой сертификат должен быть помещен в jre/lib/security/cacerts хранилище.

Упомянутый сервис - сервис компании Контур, не Крипто Про, там проверка может проходить и как обычной CMS подписи, без каких-либо проверок цепочки сертификатов и т.п.

Подпись формата CAdES-T поддержана только начиная с последнего релиза JCP 2.0. Так, например, с помощью CAdES.jar из JCP 2.0 после добавления корневого сертификата UC Test (Qualified) в список cacerts подпись успешно проверилась:

Код:

System.setProperty("com.sun.security.enableCRLDP", "true"); // для проверки цепочки сертификатов по CRL DP, т.к. нет CRL для передачи в verify

byte[] sign = Array.readFile("DP_IZVPOL_2BM_2BM-7708503727-770802009-201501260649129764666_20160228_49ddae2a-98d6-4a43-8SGN.sgn");
byte[] data = Array.readFile("DP_IZVPOL_2BM_2BM-7708503727-770802009-201501260649129764666_20160228_49ddae2a-98d6-4a43-8.xml");

CAdESSignature cAdESSignature = new CAdESSignature(sign, data, null); // подпись формата CAdES-BES
cAdESSignature.verify(null); // сертификат подписи есть в sign, потому null

FINE: Built chain contains the following certificates: 
02.03.2016 12:09:08 ru.CryptoPro.... build
FINE: [1] certificate
	serial number: ...
	subject: ..., GIVENNAME=Сертификат Тестовый, SURNAME=Диадок, T=директор, ..., CN=Тестовая организация, OU=головное, O=Тестовая организация, ...
	issuer: CN=UC Test (Qualified), OU=Удостоверяющий центр, O=ЗАО ПФ СКБ Контур, L=Екатеринбург, ST=66 Свердловская область, C=RU, EMAILADDRESS=ca@skbkontur.ru, STREET=Ульяновская 13а, OID.1.2.643.3.131.1.1=#120C303030303030303030303030, OID.1.2.643.100.1=#120D30303030303030303030303030
02.03.2016 12:09:08 ru.CryptoPro.... build
FINE: [T] Trusted certificate of chain 
	serial number: 549e00964185c48b40d2e521cfd8ab09
	subject: CN=UC Test (Qualified), OU=Удостоверяющий центр, O=ЗАО ПФ СКБ Контур, L=Екатеринбург, ST=66 Свердловская область, C=RU, EMAILADDRESS=ca@skbkontur.ru, STREET=Ульяновская 13а, OID.1.2.643.3.131.1.1=#120C303030303030303030303030, OID.1.2.643.100.1=#120D30303030303030303030303030
	issuer: CN=UC Test (Qualified), OU=Удостоверяющий центр, O=ЗАО ПФ СКБ Контур, L=Екатеринбург, ST=66 Свердловская область, C=RU, EMAILADDRESS=ca@skbkontur.ru, STREET=Ульяновская 13а, OID.1.2.643.3.131.1.1=#120C303030303030303030303030, OID.1.2.643.100.1=#120D30303030303030303030303030
...
02.03.2016 12:09:08 ru.CryptoPro.... validate
FINE: Certificate chain is valid.
...
02.03.2016 12:09:08 ru.CryptoPro.CAdES... verify
FINE: Verification completed!
	total: 1 signature(s)
	verified: 1 signature(s)

Отредактировано пользователем 2 марта 2016 г. 11:21:33(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
vldpyatkov оставлено 02.03.2016(UTC)
Offline vldpyatkov  
#5 Оставлено : 2 марта 2016 г. 13:01:01(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
В прежних примерах я использовал 2.0.38150, последняя на сайте 2.0.38674.
В последней версии JCP с сайта есть непонятная проблема c CAdESException (он теперь от какого-то класса наследуется AdESException, которого нет в jar)

Отредактировано пользователем 2 марта 2016 г. 13:02:35(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#6 Оставлено : 2 марта 2016 г. 13:15:13(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Заменить следует не только CAdES.jar, но и добавить AdES-core.jar (см. changelog.txt).

P.S. Пробовали выполнить код (если у вас CAdES из сборки 2.0.38150)?

Отредактировано пользователем 2 марта 2016 г. 13:17:35(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
vldpyatkov оставлено 02.03.2016(UTC)
Offline vldpyatkov  
#7 Оставлено : 2 марта 2016 г. 13:18:13(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: afev Перейти к цитате
Пробовали выполнить код (если у вас CAdES из сборки 2.0.38150)?


Да, там не работал.
Offline vldpyatkov  
#8 Оставлено : 2 марта 2016 г. 15:59:10(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
Теперь проверка не проходит локально, но это понятно из-за отсутствия подписи OCSP.
Но проверка CAdES-T не проходит по непонятным причинам:
cades-t.zip (5kb) загружен 6 раз(а).
Ошибка: Timestamp is invalid

Можно как-нибудь выяснить причину ошибки и пояснить механику работы в случае CAdES-T?
Offline Евгений Афанасьев  
#9 Оставлено : 2 марта 2016 г. 17:26:05(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Проблема в сертификат службы штампов - в нем истек срок действия закрытого ключа:
Действителен с 30 декабря 2013 г. 13:09:00
Действителен по 30 марта 2015 г. 13:09:00

При проверке это учитывается, т.к. подпись была создана:
28 февраля 2016 г. 12:03:53

Если перехватить исключение от verify, то это должно быть TimeStampValidationException, которое содержит описание:
Код:

PKUP of the certificate: sn 328ba466000000025a1c, subject OID.1.2.643.100.1=..., STREET=..., CN="ЗАО \"ПФ \"СКБ Контур\"", OU=УЦ, O="ЗАО \"ПФ \"СКБ Контур\"", L=Екатеринбург, ST=66 Свердловская область, C=RU, EMAILADDRESS=diadoc@kontur.ru, ... expired or not yet valid, errors: 'Private key usage period is expired or not yet valid' (7)



P.S. Попробуйте использовать адрес другой службы штампов.

Отредактировано пользователем 2 марта 2016 г. 17:29:41(UTC)  | Причина: Не указана

Offline vldpyatkov  
#10 Оставлено : 2 марта 2016 г. 18:20:42(UTC)
vldpyatkov

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

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

Сказал(а) «Спасибо»: 4 раз
У меня сейчас там сообщение Timestamp is invalid

Код:

Error building certification path for OID.1.2.643.100.1=#120D31303236363035363036363230, STREET="Космонавтов пр-кт, 56", CN="ЗАО \"ПФ \"СКБ Контур\"", OU=УЦ, O="ЗАО \"ПФ \"СКБ Контур\"", L=Екатеринбург, ST=66 Свердловская область, C=RU, EMAILADDRESS=diadoc@kontur.ru, OID.1.2.643.3.131.1.1=#120C303036363633303033313237: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target, errors: 'PKIX failure: invalid parameters of certificate' (33), errors: 'PKIX failure: invalid parameters of certificate' (33), errors: 'PKIX failure: invalid parameters of certificate' (33)


Но корневой сертификат на месте: ucTest1.zip (1kb) загружен 2 раз(а)..
Разве бывает у службы штампов другой корневой сертификат, отличный от подписи?

Цитата:
P.S. Попробуйте использовать адрес другой службы штампов.


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