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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline OlgaMakarova  
#1 Оставлено : 27 октября 2022 г. 17:47:09(UTC)
OlgaMakarova

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

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

Сказал(а) «Спасибо»: 5 раз
Проверяем ЭЦП.

Есть файл открепленной подписи с timestamp.

Когда сертификат (которым подписывали) истек, но есть валидный timestamp -
возникают проблемы с построением цепочки сертификатов.

ForwardBuilder.getMatchingCACerts(): ca is target
2022-11-02 12:35:44.672 DEBUG 13320 --- [io-11011-exec-1] ru.CryptoPro.JCP.tools.JCPLogger : ForwardBuilder.getMatchingCACerts: found 0 CA certs
2022-11-02 12:35:44.672 DEBUG 13320 --- [io-11011-exec-1] ru.CryptoPro.JCP.tools.JCPLogger : SunCertPathBuilder.depthFirstSearchForward(): certs.size= 0


Не находится промежуточный и т.д. УЦ. Хотя они добавлены в хранилище.

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

Offline Евгений Афанасьев  
#2 Оставлено : 2 ноября 2022 г. 23:36:01(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
Покажите стек ошибки. Проблема, скорее всего, в
Цитата:
сертификат (которым подписывали) истек
.
Offline OlgaMakarova  
#3 Оставлено : 3 ноября 2022 г. 9:56:06(UTC)
OlgaMakarova

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

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

Сказал(а) «Спасибо»: 5 раз
Спасибо за ответ. Мне как раз и надо проверить, что сертификат, который сейчас истек, на дату из штампа времени вполне себе действовал.
Возможно, цепочку и не получится восстановить. Но ведь подпись должна быть валидна в этом случае. А мы получаем исключение из verify
Сертификат из штампа времени полностью прошел проверку и математически, и по цепочке.


*11:38:18.527 JCPLogger : Basic signature validation completed.
*11:38:18.527 JCPLogger : Validating the signature identifier.
*11:38:18.529 JCPLogger : %%% Signer is verified %%%
*11:38:18.530 JCPLogger : Valid timestamp found!
*11:38:18.530 JCPLogger : %%% Verifying signer... %%%
*11:38:18.531 JCPLogger : Basic signature validation...
*11:38:18.531 JCPLogger : Verifying binary signature...
*11:38:18.531 JCPLogger : Find a provider that implements the digest algorithm 1.2.643.7.1.1.2.2 (JCP)
*11:38:18.532 JCPLogger : Find a provider that implements the digest algorithm 1.2.643.7.1.1.2.2 (JCP)
*11:38:18.533 JCPLogger : ENTRY
*11:38:18.533 JCPLogger : RETURN
*11:38:18.533 JCPLogger : ENTRY
*11:38:18.534 JCPLogger : RETURN
*11:38:18.534 JCPLogger : ENTRY
*11:38:18.538 JCPLogger : RETURN
*11:38:18.538 JCPLogger : Raw signature is verified by the certificate
serial number: ******
subject: OID.1.2.643.100.1=#******, OID.1.2.643.100.3=#******, OID.1.2.643.100.4=#******, EMAILADDRESS=******, O="******", CN="******", SURNAME=******, GIVENNAME=******, C=RU, L=МОСКВА, ST=г. Москва, STREET="******"
signature provider: JCP
*11:38:18.538 JCPLogger : Building signer certificate chain...
*11:38:18.539 JCPLogger : %%% Building certificate chain for certificate:
serial number: ******
subject: OID.1.2.643.100.1=#******, OID.1.2.643.100.3=#******, OID.1.2.643.100.4=#******, EMAILADDRESS=******, O="******", CN="******", SURNAME=******, GIVENNAME=******, C=RU, L=МОСКВА, ST=г. Москва, STREET="******"
issuer: CN="ООО \"КОМПАНИЯ \"ТЕНЗОР\"", O="ООО \"КОМПАНИЯ \"ТЕНЗОР\"", OU=Удостоверяющий центр, STREET="Московский проспект, д. 12", L=г. Ярославль, ST=76 Ярославская область, C=RU, OID.1.2.643.3.131.1.1=#120C303037363035303136303330, OID.1.2.643.100.1=#120D31303237363030373837393934, EMAILADDRESS=ca_tensor@tensor.ru
%%%
*11:38:18.539 JCPLogger : Find a provider that implements the signature algorithm identifier 1.2.643.7.1.1.3.2 (JCP)
*11:38:18.540 JCPLogger : %%% Building the certificate chain for the target certificate
serial number: ******
subject: OID.1.2.643.100.1=#******, OID.1.2.643.100.3=#******, OID.1.2.643.100.4=#******, EMAILADDRESS=******, O="******", CN="******", SURNAME=******, GIVENNAME=******, C=RU, L=МОСКВА, ST=г. Москва, STREET="******"
issuer: CN="ООО \"КОМПАНИЯ \"ТЕНЗОР\"", O="ООО \"КОМПАНИЯ \"ТЕНЗОР\"", OU=Удостоверяющий центр, STREET="Московский проспект, д. 12", L=г. Ярославль, ST=76 Ярославская область, C=RU, OID.1.2.643.3.131.1.1=#120C303037363035303136303330, OID.1.2.643.100.1=#120D31303237363030373837393934, EMAILADDRESS=ca_tensor@tensor.ru
signature provider: JCP
validation date: null
native implementation: true
%%%
*11:38:18.540 JCPLogger : Date for building of the certificate chain: null
*11:38:18.541 INFO 6456 --- [io-11011-exec-2] JCPLogger : System Preference Node: /ru/CryptoPro/reprov.disable_tsp_cert_app_ext_checker=false
*11:38:18.541 INFO 6456 --- [io-11011-exec-2] JCPLogger : System Preference Node: /ru/CryptoPro/reprov.disable_enroll_cert_type_ext_checker=false
*11:38:18.542 JCPLogger : %%% Build chain for certificate:
serial number: ******
subject: OID.1.2.643.100.1=#******, OID.1.2.643.100.3=#******, OID.1.2.643.100.4=#******, EMAILADDRESS=******, O="******", CN="******", SURNAME=******, GIVENNAME=******, C=RU, L=МОСКВА, ST=г. Москва, STREET="******"
issuer: CN="ООО \"КОМПАНИЯ \"ТЕНЗОР\"", O="ООО \"КОМПАНИЯ \"ТЕНЗОР\"", OU=Удостоверяющий центр, STREET="Московский проспект, д. 12", L=г. Ярославль, ST=76 Ярославская область, C=RU, OID.1.2.643.3.131.1.1=#120C303037363035303136303330, OID.1.2.643.100.1=#120D31303237363030373837393934, EMAILADDRESS=ca_tensor@tensor.ru
Valid from: 06.09.21 19:00 until: 06.09.22 19:10

*11:38:18.542 JCPLogger : SunCertPathBuilder.buildForward()...
*11:38:18.552 JCPLogger : SunCertPathBuilder.depthFirstSearchForward(ОГРН=******, СНИЛС=******, КПП=******, EMAILADDRESS=******, O="******", CN="******", SN=******, G=******, C=RU, L=МОСКВА, ST=г. Москва, STREET="******", State [
issuerDN of last cert: null
traversedCACerts: 0
init: true
keyParamsNeeded: false
subjectNamesTraversed:
[]]
)
*11:38:18.552 JCPLogger : ForwardBuilder.getMatchingCerts()...
*11:38:18.553 JCPLogger : ForwardBuilder.getMatchingEECerts()...
*11:38:18.553 JCPLogger : ForwardBuilder.getMatchingCACerts()...
*11:38:18.553 JCPLogger : ForwardBuilder.getMatchingCACerts(): ca is target
*11:38:18.554 JCPLogger : ForwardBuilder.getMatchingCACerts: found 0 CA certs
*11:38:18.554 JCPLogger : SunCertPathBuilder.depthFirstSearchForward(): certs.size= 0
*11:38:18.554 JCPLogger : SunCertPathBuilder.engineBuild: 2nd pass
*11:38:18.555 JCPLogger : SunCertPathBuilder.buildForward()...
*11:38:18.564 JCPLogger : SunCertPathBuilder.depthFirstSearchForward(ОГРН=******, СНИЛС=******, КПП=******, EMAILADDRESS=******, O="******", CN="******", SN=******, G=******, C=RU, L=МОСКВА, ST=г. Москва, STREET="******", State [
issuerDN of last cert: null
traversedCACerts: 0
init: true
keyParamsNeeded: false
subjectNamesTraversed:
[]]
)
*11:38:18.564 JCPLogger : ForwardBuilder.getMatchingCerts()...
*11:38:18.564 JCPLogger : ForwardBuilder.getMatchingEECerts()...
*11:38:18.565 JCPLogger : ForwardBuilder.getMatchingCACerts()...
*11:38:18.565 JCPLogger : ForwardBuilder.getMatchingCACerts(): ca is target
*11:38:18.566 JCPLogger : ForwardBuilder.getMatchingCACerts: found 0 CA certs
*11:38:18.566 JCPLogger : SunCertPathBuilder.depthFirstSearchForward(): certs.size= 0
*11:38:18.568 JCPLogger : THROW

ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.engineBuild(Unknown Source) ~[JCPRevCheck.jar:41789]
at ru.CryptoPro.reprov.CPCertPathBuilder.engineBuild(Unknown Source) ~[JCPRevCheck.jar:41789]
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) ~[na:1.8.0_221]
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl$1CertPathBuilderWrapper.build(Unknown Source) ~[AdES-core.jar:39852]
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source) [AdES-core.jar:39852]
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source) [AdES-core.jar:39852]
at ru.CryptoPro.AdES.external.signature.AdESSigner.build(Unknown Source) [AdES-core.jar:39852]
at ru.CryptoPro.CAdES.CAdESSignerPKCS7Impl.verify(Unknown Source) [CAdES.jar:39852]
at ru.CryptoPro.CAdES.CAdESSignerBESImpl.verify(Unknown Source) [CAdES.jar:39852]
at ru.CryptoPro.CAdES.CAdESSignerTImpl.verify(Unknown Source) [CAdES.jar:39852]
at ru.CryptoPro.CAdES.cl_0.verify(Unknown Source) [CAdES.jar:39852]
at ru.CryptoPro.CAdES.cl_0.verify(Unknown Source) [CAdES.jar:39852]
Offline Евгений Афанасьев  
#4 Оставлено : 3 ноября 2022 г. 17:36:08(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Подписи формата CAdES-BES и CAdES-T проверяются на текущий момент времени. В случае CAdES-X Long Type 1 подпись содержит необходимые ссылки и доказательства и может быть проверена на момент создания подписи.
Offline OlgaMakarova  
#5 Оставлено : 3 ноября 2022 г. 18:04:11(UTC)
OlgaMakarova

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

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

Сказал(а) «Спасибо»: 5 раз
Спасибо.

У меня так получатся одинаковые исключения, когда, действительно, не удалось построить цепочку и когда просто сертификат просрочен, а метка времени хорошая.

Мне бы хотелось по-разному информировать людей, загружающих документы, в чем проблема. Вот как на Госуслугах это делается.

Есть какой-то способ различить эти варианты по исключению? Или надо дополнительно bouncycastle-ом ковыряться в датах?
Может быть, есть метод для проверки сертификата без обхода цепочки?
Offline Евгений Афанасьев  
#6 Оставлено : 3 ноября 2022 г. 18:47:42(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
"Мне бы хотелось по-разному информировать людей, загружающих документы, в чем проблема." - можно, если формат подписи CAdES-BES, извлекать после декодирования сертификат подписи и проверять его срок действия (с текущей датой). Если CAdES-T, то извлекать штамп времени (Timestamp) и сравнивать его дату со сроком сертификата.
"Есть какой-то способ различить эти варианты по исключению?" - ошибка из PKIX провайдера приходит довольно общая, без особых подробностей.
"Может быть, есть метод для проверки сертификата без обхода цепочки?" - разве что вы сами его реализуете (разбор сообщения, проверка подписи, как в CMS/CMSVerify в samples-sources.jar).

Отредактировано пользователем 3 ноября 2022 г. 18:50:04(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
OlgaMakarova оставлено 03.11.2022(UTC)
Offline OlgaMakarova  
#7 Оставлено : 3 ноября 2022 г. 19:46:53(UTC)
OlgaMakarova

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

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

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