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

Уведомление

Icon
Error

3 Страницы<123>
Опции
К последнему сообщению К первому непрочитанному
Offline Capfunny  
#11 Оставлено : 21 января 2019 г. 21:05:54(UTC)
Capfunny

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

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

Сказал(а) «Спасибо»: 9 раз
Просто у нас следующая ситуация, и не понятно, как её правильно разрешить:

Есть JKS-хранилище, наполненное открытыми сертификатами от разных подписантов. Среди них есть как публичные (для верификации подписи), так могут быть и промежуточные, и корневые. Все сертификары в хранилище собраны по группам по подписанту, но мы можем навернка определить только группу и публиный сертификат, а вот корневой в группе - не можем!

1.В этом случае не понтно, как устанавливать TrustAnchor? Видимо для каждой группы сертификатов как-то нужно определить root?
2.Я правильно понимаю, что target-сертификат из вашего последнего ответа устанавливается в первом примере с помощью кода:
Цитата:
final X509CertSelector selector = new X509CertSelector();
selector.setCertificate((X509Certificate) user);
cpp.setTargetCertConstraints(selector);
Offline Евгений Афанасьев  
#12 Оставлено : 22 января 2019 г. 9:36:03(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Автор: Capfunny Перейти к цитате
Просто у нас следующая ситуация, и не понятно, как её правильно разрешить:

Есть JKS-хранилище, наполненное открытыми сертификатами от разных подписантов. Среди них есть как публичные (для верификации подписи), так могут быть и промежуточные, и корневые. Все сертификары в хранилище собраны по группам по подписанту, но мы можем навернка определить только группу и публиный сертификат, а вот корневой в группе - не можем!

1.В этом случае не понтно, как устанавливать TrustAnchor? Видимо для каждой группы сертификатов как-то нужно определить root?
2.Я правильно понимаю, что target-сертификат из вашего последнего ответа устанавливается в первом примере с помощью кода:
Цитата:
final X509CertSelector selector = new X509CertSelector();
selector.setCertificate((X509Certificate) user);
cpp.setTargetCertConstraints(selector);

1. Если вы знаете того, для кого нужно построить цепочку (т.е. target), то прочитайте сертификаты из JKS хранилища, разделите их на корневые (самоподписанные, cert.issuer==cert.subject и cert.getBasicConstraints() != -1), и другие (промежуточные и т.п.). Корневые добавьте в trust anhors, вообще все сертификаты - в CertStore-список (в примере в начале переписки), с помощью функции addCertStore. Далее стройте для target-сертификата цепочку. Можно еще поискать список наиболее распространенных корневых сертификатов (Головной Удостоверяющий Центр и т.п.).
2. Да.

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

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
Capfunny оставлено 22.01.2019(UTC)
Offline berbigman  
#13 Оставлено : 29 января 2019 г. 18:58:01(UTC)
berbigman

Статус: Новичок

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

А есть ли возможность не проверять просроченность сертификата и всё равно построить цепочку?
Offline Евгений Афанасьев  
#14 Оставлено : 30 января 2019 г. 9:25:34(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Разве что задавать setDate(дата) у параметров для передачи в build.
Offline berbigman  
#15 Оставлено : 30 января 2019 г. 12:06:35(UTC)
berbigman

Статус: Новичок

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

да именно так и можно, а дату можно дернуть из серификата который использиется для селектора. Спасибо
Offline Capfunny  
#16 Оставлено : 14 мая 2019 г. 13:13:23(UTC)
Capfunny

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

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

Сказал(а) «Спасибо»: 9 раз
Здравствуйте, Евгений!

Возникла странная ситуация:
Идёт проверка цепочки сертификатов, возникает следующая ошибка:

13-May-2019 14:22:52.898 WARNING [http-nio-8080-exec-48] ru.CryptoPro.reprov.certpath.URICertStore.engineGetCertificates Exception fetching certificates:
java.io.FileNotFoundException: http://testgost2012.cp.ru/CertEnroll/root2018.crt

То есть цепочку JCP восстановить не может, но почему-то возвращает положительный результат проверки! Правильно ли это?

Кроме того, хотелось бы понять, как можно уменьшить время таймаута при проверки цепочки?
Offline Евгений Афанасьев  
#17 Оставлено : 15 мая 2019 г. 10:19:41(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
Это сообщение - warning, предупреждение, не ошибка. Вероятно, файл по указанному адресу не доступен и был скачан по другому.
Не понял на счет "цепочку JCP восстановить не может", уточните, пожалуйста.
Под "уменьшить время таймаута" подразумевается уменьшение какого-то конкретного таймаута или времени проверки? Если второе, то оно зависит от кол-ва обращений в сеть за сертификатами/CRL и параметров, относящихся к сети, тут вряд ли что-то можно ускорить.
Offline Capfunny  
#18 Оставлено : 15 мая 2019 г. 11:32:32(UTC)
Capfunny

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

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

Сказал(а) «Спасибо»: 9 раз
Евгений, спасибо за ответы.
Под временем таймаута подразумевается время ожидания ответа от сервера удостоверяющего центра. В нашем случае - http://testgost2012.cp.ru/CertEnroll/root2018.crt

Просто у нас происходит какая-то нездоровая фигня – попытка получения цепочки сертификатов именно по указанному выше URL (URL берётся из сертификата) занимает до 20 минут! Это неудовлетворительный результат! :(
Offline Евгений Афанасьев  
#19 Оставлено : 15 мая 2019 г. 11:38:59(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Проверим, в браузере он скачивается быстро, хотя подозреваю, что и в программно у меня он загрузится также быстро (возможно, есть какие-то сетевые особенности на вашей стороне, которые мы не сможем поспроизвести).
Из быстрых решений: кешировать корневые сертификаты где-нибудь (CertStore, JKS, BKS и т.п.), тогда они будут у вас и грузить не надо будет (можно будет подавать в addStore у PKIX...Parameters для build или validate операций).
Offline Capfunny  
#20 Оставлено : 15 мая 2019 г. 14:37:06(UTC)
Capfunny

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

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

Сказал(а) «Спасибо»: 9 раз
Автор: Евгений Афанасьев Перейти к цитате
Проверим, в браузере он скачивается быстро, хотя подозреваю, что и в программно у меня он загрузится также быстро


Евгений, указанный мной узел - http://testgost2012.cp.ru/CertEnroll/root2018.crt - узел мёртвый! Оттуда никак ничего скачать невозможно!
Вот и складывается впечатление, что JCP подвисает, повторяя попытки запроса к мёртвому узлу! Поэтому и спрашивал про таймаут.

По поводу вот этого:
Цитата:
можно будет подавать в addStore у PKIX...Parameters для build или validate операций
- не совсем понял. Корневые сертификаты в хранилище храню, подаю их в списке certificates, и осуществляю дальнейшую проверку цепочки, как указано в коде ниже:


Код:
inal Set<TrustAnchor> trust = new HashSet<TrustAnchor>(1);
            trust.add(new TrustAnchor((X509Certificate) rootcert, null));

            final List cert = new ArrayList(0);
            for (int i = 0; i < certificates.length; i++)
                cert.add(certificates[i]);

            final PKIXBuilderParameters cpp = new PKIXBuilderParameters(trust, null);
            cpp.setSigProvider(null);

            final CollectionCertStoreParameters par =  new CollectionCertStoreParameters(cert);

            final CertStore store = CertStore.getInstance("Collection", par);
            cpp.addCertStore(store);

            final X509CertSelector selector = new X509CertSelector();
            selector.setCertificate((X509Certificate) targercert);

            cpp.setTargetCertConstraints(selector);
            cpp.setRevocationEnabled(false);

            // Построение цепочки.
            final PKIXCertPathBuilderResult res = (PKIXCertPathBuilderResult) CertPathBuilder.getInstance("CPPKIX", "RevCheck").build(cpp);
            final CertPath cp = res.getCertPath();

            // Проверка цепочки.
            final CertPathValidator cpv = CertPathValidator.getInstance("CPPKIX", "RevCheck");
            cpp.setRevocationEnabled(true);
            cpv.validate(cp, cpp);
            //окончание кода с форума JCP

            //если всё хорошо - возвращаем true, иначе проверка падает с ошибкой!
            result = true;
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
3 Страницы<123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.