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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline vass0819  
#1 Оставлено : 31 октября 2019 г. 16:31:00(UTC)
vass0819

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

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

Сказал(а) «Спасибо»: 6 раз
Существует ли готовое решение с проверкой цепи сертификатов? В качестве входных данных имею сам сертификат, приватный и публичный ключи.

Соответственно, с помощью Certificate[] certificates = ks.getCertificateChain("alias"); могу получить все три сертификата.

Попробовал переписать пример из ./samples/userSamples/OCSPValidateCert.java

На данной строчке
final PKIXCertPathBuilderResult res =
(PKIXCertPathBuilderResult) CertPathBuilder.
getInstance("CPPKIX", "RevCheck").build(cpp);
получаю Exception in thread "main" ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target

Есть ли идеи как можно решить?

Отредактировано пользователем 31 октября 2019 г. 17:30:27(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 31 октября 2019 г. 18:18:13(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
Здравствуйте. Рабочие примеры - это OCSPValidateCert и CRLValidateCert. Для построения нужно добавить корневые сертификаты (любые, какие могут помочь при почтроении) в TrustAnchor-список, и все остальные сертификаты (промежуточные и т.д., что могут помочь при построении) в addCertStore параметров построения цепочки.
Offline vass0819  
#3 Оставлено : 1 ноября 2019 г. 16:48:28(UTC)
vass0819

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

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

Сказал(а) «Спасибо»: 6 раз
Получилось реализовать CRL пример, но при этом возник вопрос. Каким образом проверяется цепочка сертификатов на нахождение в CRL. CRL уже скачан на компьютер и хранится вместе с сертификатом или загружаются во время проверки с помощью JCP?
Offline Евгений Афанасьев  
#4 Оставлено : 1 ноября 2019 г. 16:54:17(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
Цепочка проверяется методом CertPathValidator.validate().
Если есть доступ в сеть и включена настройка enableCRLDP, то CRL, если есть ссылки на них в сертификатах, будут скачаны. Иначе их можно скачать/получить отдельно и передать в addCertStore наравне с сертификатами (которые используются при построении цепочки).
Offline vass0819  
#5 Оставлено : 1 ноября 2019 г. 16:57:52(UTC)
vass0819

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Евгений Афанасьев Перейти к цитате
включена настройка enableCRLDP


Каким образом можно проверить включена ли она? И можно ли программно менять ее состояние?
Offline Евгений Афанасьев  
#6 Оставлено : 1 ноября 2019 г. 16:59:59(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
System.setProperty("com.sun.security.enableCRLDP", "true");
-Dcom.sun.security.enableCRLDP=true
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
vass0819 оставлено 01.11.2019(UTC)
Offline vass0819  
#7 Оставлено : 1 ноября 2019 г. 17:09:11(UTC)
vass0819

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

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

Сказал(а) «Спасибо»: 6 раз
А где будет храниться CRL, который скачивается при выполнении программы? В реестр?

Отредактировано пользователем 1 ноября 2019 г. 17:10:20(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#8 Оставлено : 1 ноября 2019 г. 17:21:09(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
CRL, который скачивается из сети, кэшируется в памяти приложения.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
vass0819 оставлено 01.11.2019(UTC)
Offline SerPenTeHoK  
#9 Оставлено : 12 ноября 2019 г. 17:21:06(UTC)
SerPenTeHoK

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

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

Автор: Евгений Афанасьев Перейти к цитате
Цепочка проверяется методом CertPathValidator.validate().
Если есть доступ в сеть и включена настройка enableCRLDP, то CRL, если есть ссылки на них в сертификатах, будут скачаны. Иначе их можно скачать/получить отдельно и передать в addCertStore наравне с сертификатами (которые используются при построении цепочки).


Добрый день, Евгений!

Спасибо, за ответ. Хотелось уточнить по поводу списка отзывов, в случае отсутствия интернета.
У меня есть:
1) папка с доверенными сертификатами, включая сертификат минкомсвязи. У организации есть свой УЦ и, возможно, позже их сертификат будет рутовым;
2) Папка со списками отзывов;
3) Файл и откреплённая подпись.

Что делаю (по примерам):
0) Устанавливаю параметры:
Код:
        System.setProperty("com.ibm.security.enableCRLDP", "false");
        System.setProperty("com.sun.security.enableCRLDP", "false");
        System.setProperty("com.sun.security.enableAIAcaIssuers", "false");
        System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "false");

1) Вытаскиваю из файла подписи сертификат;
2) Проверяю валидность подписи для файла;
3) Подтягиваю сертификаты из папки доверенных;
4) Выбираю рутовый сертификат(минсвязи) и добавляю в TrustAnchor;
5) Создаю CollectionCertStoreParameters и дописываю:
Код:
        params.setSigProvider("JCP");
        params.setRevocationEnabled(true);

6) Добавляю доверенные сертификаты:
Код:
        Set<X509Certificate> certChain = getCertificatesFromPath(pathToCertificates);

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

        // инициализация объекта построения цепочки сертификатов
        final CertPathBuilder cpb = CertPathBuilder.getInstance("PKIX");
        //или для совместимости с КриптоПро УЦ
        //CertPathBuilder cpb = CertPathBuilder.getInstance("CPPKIX");

        // инициализация параметров построения цепочки сертификатов
        final PKIXBuilderParameters params = new PKIXBuilderParameters(
                Collections.singleton(anchor), new X509CertSelector());

        // добавление к параметрам сертификатов, из которых
        // будет строиться цепочка
        params.addCertStore(store);

7) Добавляю списки отзывов:
Код:
        Set<X509CRL> crlListForCheck = getCrlFromPath(pathToCrl);
        final CollectionCertStoreParameters parCrl =
                new CollectionCertStoreParameters(crlListForCheck); //certs

        // создание специального хранилища отзывов сертификатов на основе
        // параметров, определенных списком сертификатов
        final CertStore storeCrl = CertStore.getInstance("Collection", parCrl);
        params.addCertStore(storeCrl);

8) Выбираю конечный сертификат из отсоединённой подписи;
9) Проверяю
Код:
        final CertPathValidatorResult val_res =
                validator.validate(res.getCertPath(), params);

10) Выдаёт "unable to find valid certification path to requested target", если params.setRevocationEnabled(false); <- Всё нормально.

Подскажите, пожалуйста, в какую сторону копать? И соответствуют ли такая проверка формуляру:
ЖТЯИ.00091-02 33 01-01. Руководство программиста.pdf

Отредактировано пользователем 12 ноября 2019 г. 17:27:25(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#10 Оставлено : 12 ноября 2019 г. 17:26:24(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
Здравствуйте.
Попробуйте так:
1) убрать
params.setSigProvider("JCP");
- подпись не обязательно может быть ГОСТ;
2) вместо
final CertPathBuilder cpb = CertPathBuilder.getInstance("PKIX");
задать
final CertPathBuilder cpb = CertPathBuilder.getInstance("CPPKIX", "RevCheck");
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.