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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline maximkosheev  
#1 Оставлено : 29 августа 2019 г. 12:12:44(UTC)
maximkosheev

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

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

Сказал(а) «Спасибо»: 4 раз
Добрый день!
Возникла следующая задача: добавить в cacerts java информацию о сертификатах, входящих в цепочку.
Как бы я решал эту задачу вручную:
1. С помощью оснастки "Сертификаты" получил бы цепочку сертификатов (последний закрашенный - мой)
Путь сертификации моего сертификата
2. Выбрал нужный сертификат, например выше стоящий "АО "ПФ "СКБ КОНТУР"
3. Нажал на "Просмотр сертификата"
4. На аналогичном окне свойств сертификата, но уже для "АО "ПФ "СКБ КОНТУР" на вкладке "Состав" нажал бы "Копировать в файл"
5. Запустился бы мастер экспорта сертификата
6. Выбрал бы тип файла, например "Файлы X.509(.CER) в кодировке DER" и получил бы готовый файл *.cer
7. С помощью утилиты keytool из пакета JRE/JDK импортировал этот файл *.cer в доверенное хранилище cacerts.

Выполнив эти действия для всех сертификатов в цепочке, я получил бы то, что мне нужно.

Вопрос в том как выполнить действия программно с помощью JCA + JCP (хотябы получить цепочку и экспортировать в файлы) без мастеров Windows?

Буду благодарен за любую помощь или направление куда "копать".
Offline Евгений Афанасьев  
#2 Оставлено : 29 августа 2019 г. 12:59:13(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
Примеры построения и проверки цепочки сертификатов можно найти в samples-sources.jar (в дистрибутиве jcp), файлы OCSPValidateCert и CRLValidateCert. В CRLValidateCert построение осуществляется с помощью CertPathBuilder.build() (дальнейшая часть с validate не требуется, если только построение), при этом должен быть задан доверенный корневой сертификат (либо как сертификат, либо открытый ключ с издателем, см. описание TrustAnchor). target-сертификат - ваш сертификат. Промежуточных может не быть, но, чтобы цепочка была построена
1) ссылки на них должны быть в сертификатах (для примера client-CA2-CA1-root: в client - ссылка на промежуточный CA2, в CA2 - ссылка на промежуточный CA1);
2) должен быть задан параметр System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "true"), если используется CertPathBuilder.getInstance("CPPKIX", "RevCheck").
В этом случае и при наличии доступа к сети промежуточные сертификаты будут загружены, вся цепочка будет доступна в PKIXCertPathBuilderResult. Далее можно сохранять getEncoded() сертификата.

Отредактировано пользователем 29 августа 2019 г. 13:00:34(UTC)  | Причина: Не указана

Offline maximkosheev  
#3 Оставлено : 11 сентября 2019 г. 20:47:27(UTC)
maximkosheev

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

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

Сказал(а) «Спасибо»: 4 раз
Отчасти помогло, но вот что не понятно.
Мой сертификат я могу вытянуть программно с токена - в этой части проблем возникнуть не должно.
А вот как получить корневой доверенный сертификат?
Как вы правильно заметили
Цитата:
при этом должен быть задан доверенный корневой сертификат (либо как сертификат, либо открытый ключ с издателем, см. описание TrustAnchor)
он должен быть.
В примере CRLValidateCert он задается в виде root.cer:
Код:
Certificate root = cf.generateCertificate(new FileInputStream(PATH + "root.cer"));

С помощью мастера экспорта сертификатов Windows получить root.cer можно без проблем. А вот как получить root.cer программно?
Offline Евгений Афанасьев  
#4 Оставлено : 11 сентября 2019 г. 22:24:51(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Мастером Windows он выгружается, потому что есть в хранилище (был установлен туда) или ссылка на него есть в предыдущем сертификате. Иначе мастер его не сможет выгрузить, так как неоткуда. В случае с явой trust anchors должны быть заданы, то есть придётся найти в интернете корневые сертификаты и установить в cacerts, иное хранилище или в виде файлов сохранить. На форуме где-то были ссылки на основные корневые сертификаты.
Offline maximkosheev  
#5 Оставлено : 19 сентября 2019 г. 22:24:52(UTC)
maximkosheev

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

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

Сказал(а) «Спасибо»: 4 раз
Я никак не могу решить для себя вот какую задачу.
Есть у пользователя сертификат его ЭЦП. Предположим, у него есть заранее скаченные корневые сертификаты (например, отсюда https://e-trust.gosuslugi.ru/MainCA) в виде *.cer.
Как имея сертификат ЭЦП определить какой именно из этих корневых сертификатов входит в цепочку? Неужели нужно попробовать построить цепочки между пользовательским сертификатом и каждым корневым и отлавливать исключения? И если мы наткнулись на такую пару, то это именно тот корневой сертификат, который нам нужен? Речь идет именно про Java
Offline Евгений Афанасьев  
#6 Оставлено : 19 сентября 2019 г. 23:56:02(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Смотрите примеры, что я упомянул ранее. Все корневые (не один) нужно добавить в список TrustAnchor для параметров построения и вообще все сертификаты (корневые, промежуточные, клиентские) добавить в список сертификатов для подачи в pkix parameters, а в target указать клиентский. Цепочка будет построена, если в наличии есть все сертификаты. На всякий случай, если есть доступ в сеть, можно также включить enableaiacaissuers, как выше говорилось, чтобы докачались промежуточные, если возможно.

Отредактировано пользователем 19 сентября 2019 г. 23:56:34(UTC)  | Причина: Не указана

Offline gluberg  
#7 Оставлено : 9 ноября 2023 г. 10:42:57(UTC)
gluberg

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

Группы: Участники
Зарегистрирован: 27.02.2023(UTC)
Сообщений: 13

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 3 раз в 2 постах
Я только одного не понимаю. Если в самой программе крипто про зайти в свойства сертификата и посмотреть путь, то если промежуточный и корневой не установлены они будут просто красным крестом светиться. Их можно спокойно экспортировать прямо из этой цепочки и установить в хранилища. Каким образом это можно на Java реализовать?
Offline Евгений Афанасьев  
#8 Оставлено : 15 ноября 2023 г. 21:59:46(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
При условии, что в trust anchors есть нужный корневой, можно с помощью com.sun.security.enableAIAcaIssuers=true и ru.CryptoPro.reprov.enableAIAcaIssuers=true - сертификаты будут скачане по сети, если это возможно.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.