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

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline biff  
#1 Оставлено : 22 июля 2022 г. 16:17:09(UTC)
biff

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

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

Ubuntu 22.04 LTS
JavaCPS 5.0.42119-A
CSP 5.0

В КриптоПро CSP есть свои хранилища CA и TRUSTED ROOT, почему же CAdES использует cacerts? Более того имея в CSP полную цепочку сертификатов метод getCertificateChain всегда возвращает один конктретный сертификат.

Мне нужно создать подпись CAdES-X-L, пользователь сам выбирает хранилище сертификатов (жесткий диск и тд), но Java CSP не может создать подпись через CAdES API т.к. не может самостоятельно получить цепочку сертификатов из CSP. Сам сертификат имеет полную цепочку, при импорте сертификата CSP раскидывает входящие в цепочку сертификаты по разным хранилищам Personal, Intermediate, Trusted Root.
И как получить обратно из CSP всю цепочку с помощью Java CSP? Грузить отдельно CA и ROOT хранилища и искать там или самому грузить по url всю цепочку?
Если пытаться грузить CA и ROOT store в Java приложении, то приложение зависает на несколько минут, при этом если запускать CSP tools, то запускается за миллисекунды и спокойно отображает CA и ROOT хранилища. В Java CSP есть явные проблемы при работе с хранилищами CSP

Отредактировано пользователем 22 июля 2022 г. 17:36:53(UTC)  | Причина: Не указана

Offline biff  
#2 Оставлено : 22 июля 2022 г. 17:32:07(UTC)
biff

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

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

Проблема в производительности также наблюдается при работе с PFX_STORE_NAME, грузит сертификат несколько минут, хотя в интерфейсе CSP тотже сертификат грузится в секунду, но там хотя бы есть вся цепочка сертификатов.
Offline biff  
#3 Оставлено : 23 июля 2022 г. 2:56:59(UTC)
biff

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

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

Итоги:
AdES использует BC (BouncyCastle) для построения пути сертификатов (ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl). Почему бы не использовать JCSP провайдер, он же может получить CA_STORE и ROOT_STORE из CSP? И тем самым построить правильный путь и не нужно дополнительно сертификаты в cacerts импортировать.

Суть проблемы, пользователь для подписи может использовать разные сертификаты от разных УЦ, в основном они устанавливают сертификаты только КрипроПро CSP и ничего не знают о cacerts и как в него добавлять сертификаты. На данный момент 42 аккредитованных УЦ, но в любой момент могут появится новые, использование параметра com.sun.security.enableAIAcaIssuers тоже не вариант, т.к. в некоторых сертификатах CA url уже не доступны (например УЦ Корус, в нем CA url http://reestr-pki.ru/cdp/guc_gost12.crt). И у пользователей нет прав на редактирование cacerts, т.е. это нужно будет постоянно обновлять этот файл через политики.
Почему AdES классы в JavaCPS не могут использовать JCSP как источник CA сертификатов?
Offline Санчир Момолдаев  
#4 Оставлено : 25 июля 2022 г. 2:48:46(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 274 раз в 254 постах
Добрый день!
есть JCP (чистая java)
и есть JavaCSP (java + jni to call csp functions)
в случае JavaCSP происходит непосредственное обращение к закрытому ключу в CSP и криптографическая операция (подпись/расшифрование). построение цепочки и отзыв происходит уже в JCP


бывают также случаи что пользователь не имеет прав на установку csp и jcp. в этом случае спасает jcp с литерой А в названии для java10+. где установка уже не требуется и все работает на чистом java.

про большие задержки при открытии хранилищ и pfx: не могли бы вы создать обращение на портале техподдержки и приложить проект где воспроизводится такая длительная операция

по поводу
Цитата:
Почему AdES классы в JavaCPS не могут использовать JCSP как источник CA сертификатов?

вы первый на моей памяти кто это спрашивает. передам мейнтейнеру
Техническую поддержку оказываем тут
Наша база знаний
Offline biff  
#5 Оставлено : 25 июля 2022 г. 11:09:14(UTC)
biff

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

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

Цитата:
и есть JavaCSP (java + jni to call csp functions)

Это наш вариант, мы используем JavaCPS т.е. мы предполагаем, что вся работа JCA с провайдером JCSP будет перенаправлена в CPS как следует из вашего же описания.
1. Почему же тогда в JavaCSP нельзя поменять классы AdES чтобы они грузили сертификаты не из jvm, а из CSP тем более что есть для этого и константы соответствующие JCSP.ROOT_STORE_NAME и JCSP.CA_STORE_NAME?
2. Ну и про цепочку сертификатов: Почему из HD_IMAGE не возвращается вся цепочка сертификатов, а только один сертификат?
Offline Санчир Момолдаев  
#6 Оставлено : 25 июля 2022 г. 11:55:23(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 274 раз в 254 постах
1. Потому что cades общий как для jcp так и для jcsp
2. Возможно в контейнере только сертификат без цепочки?
Протестируйте его. В выводе будет информация
Техническую поддержку оказываем тут
Наша база знаний
Offline biff  
#7 Оставлено : 25 июля 2022 г. 16:29:17(UTC)
biff

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

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

1. Общий это хорошо, но и плохо, JCSP как вы сами говорите должет полностью работать через CSP и использовать хранилища из CSP. Не вижу проблемы почему бы вам не читать trusted store из CSP и заполнять соответствующие коллекции в CertificateChainBuilderImpl. Мы специально ушли от JCP, чтобы работать только с CSP как основным провайдером криптозащиты, не зависимо от языка на котором написано приложение, чтобы вся работа с сертификатами шла через CSP.

2. Серитификат в pfx, в нем же присутствует вся цепочка сертификатов, при импорте "Import Keys" в CSP, CPS говорит что импортировал 3 сертификата, один в Personal, другой в Intermediate и один в Trusted Root:
Код:

Certificate is installed
    Thumbprint: 4BC6DC14D97010C41A26E058AD851F81C842415A
    Subject name: Минкомсвязь России
    Store: Trusted Root Certification Authorities
Certificate is installed
    Thumbprint: 1FDA0399DC26008E2320BCAAF9279571F3A779A9
    Subject name: ООО "КОРУС Консалтинг СНГ"
    Store: Intermediate Certification Authorities
Certificate is installed
    Thumbprint: 752EA702DD602016E5678D1740DA2D1B9008228B
    Subject name: XXXXX
    Store: Personal


Но при этом создается HD_IMAGE контейнер только с одним сертификатом простой тест падает (для примера возьмите любой сертификат от любого аккредитованного УЦ)
Код:
    
    @Test
    public void certificateChainLengthEquals3() throws Exception {
        var store = SecurityUtils.keyStore(JCSP.HD_STORE_NAME);
        store.load(null, null);
        var cert = store.getCertificate("e006ba2e-4bc6-420e-96e1-4a7baaaef5ad");
        var chain = store.getCertificateChain("e006ba2e-4bc6-420e-96e1-4a7baaaef5ad");
        Assertions.assertEquals(3, chain.length);
    }


Получается, что чтобы получить приватный ключ мне нужно брать его из HD_IMAGE, а как получить всю цепочку сертификатов от оригинального pfx?

Отредактировано пользователем 25 июля 2022 г. 16:29:49(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#8 Оставлено : 25 июля 2022 г. 16:41:48(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.

Автор: biff Перейти к цитате

В КриптоПро CSP есть свои хранилища CA и TRUSTED ROOT, почему же CAdES использует cacerts?

Так сложилось исторически, у Java вполне есть свое хранилище доверенных корневых сертификатов cacerts. Возможность работы с CSP появилась позже.

Автор: biff Перейти к цитате

И как получить обратно из CSP всю цепочку с помощью Java CSP? Грузить отдельно CA и ROOT хранилища и искать там или самому грузить по url всю цепочку?

Действовать в соответствии с описанием интерфейсов и документации. Других механизмов нет. Java CSP изначально настроен на взаимодействие с CSP тjлько по части криптографии, поддержка работы с его хранилищами появилась недавно.

Автор: biff Перейти к цитате

Если пытаться грузить CA и ROOT store в Java приложении, то приложение зависает на несколько минут, при этом если запускать CSP tools, то запускается за миллисекунды и спокойно отображает CA и ROOT хранилища. В Java CSP есть явные проблемы при работе с хранилищами CSP

В последних версиях Java CSP устранялись подобные проблемы.

Автор: biff Перейти к цитате

Проблема в производительности также наблюдается при работе с PFX_STORE_NAME, грузит сертификат несколько минут, хотя в интерфейсе CSP тотже сертификат грузится в секунду, но там хотя бы есть вся цепочка сертификатов.

См. выше, в последних версиях Java CSP устранялись подобные проблемы.

Автор: biff Перейти к цитате

Суть проблемы, пользователь для подписи может использовать разные сертификаты от разных УЦ, в основном они устанавливают сертификаты только КрипроПро CSP и ничего не знают о cacerts и как в него добавлять сертификаты. На данный момент 42 аккредитованных УЦ, но в любой момент могут появится новые, использование параметра com.sun.security.enableAIAcaIssuers тоже не вариант, т.к. в некоторых сертификатах CA url уже не доступны (например УЦ Корус, в нем CA url http://reestr-pki.ru/cdp/guc_gost12.crt). И у пользователей нет прав на редактирование cacerts, т.е. это нужно будет постоянно обновлять этот файл через политики.

Вопросами установки корневых сертификатов в cacerts обычно занимается администратор системы.
JCP/JCSP чаще используются в серверных системах, что у вас за ПО?

Автор: biff Перейти к цитате

AdES использует BC (BouncyCastle) для построения пути сертификатов (ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl). Почему бы не использовать JCSP провайдер, он же может получить CA_STORE и ROOT_STORE из CSP? И тем самым построить правильный путь и не нужно дополнительно сертификаты в cacerts импортировать.
...
Почему AdES классы в JavaCPS не могут использовать JCSP как источник CA сертификатов?

В конечном итоге используется провайдер RevCheck.
Возможность использовать системные хранилища в CAdES мы проверим, спасибо за предложение.

Автор: biff Перейти к цитате

вся работа JCA с провайдером JCSP будет перенаправлена в CPS как следует из вашего же описания.

Вся не будет, но вопрос на счет использования системных хранилищ мы изучим.

Автор: biff Перейти к цитате

1. Почему же тогда в JavaCSP нельзя поменять классы AdES чтобы они грузили сертификаты не из jvm, а из CSP тем более что есть для этого и константы соответствующие JCSP.ROOT_STORE_NAME и JCSP.CA_STORE_NAME?

Доступ к системным хранилищам появился недавно. Для библиотек *AdES* так сложилось исторически - работа прежде всего с Java, а не CSP, без жесткой привязки к провайдеру, одинаково для JCP (прежде всего) и Java CSP.

Автор: biff Перейти к цитате

2. Ну и про цепочку сертификатов: Почему из HD_IMAGE не возвращается вся цепочка сертификатов, а только один сертификат?

Метод getCertificateChain всегда возвращает цепочку сертификатов или один сертификат из ключевого контейнера заданного типа (HDIMAGE).
Offline biff  
#9 Оставлено : 25 июля 2022 г. 17:19:32(UTC)
biff

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

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

Спасибо за развернутый ответ.
ПО обычное, работа с документами, только вот заказчик не хочет никаких лишних действий, даже если это будут администраторы, в общем пока сделаем локальный cacerts файл, благо Java это позволяет.

Проблему с быстродействием удалось локализовать, связана она с тем что CSP пытается валидировать сертификаты в своих хранилищах при их чтении, я уже использую последнюю версию CSP 5.0.12000.
Воспроизводится просто, можно в самом CSP нажать "View certificate details", но печально, что при загрузке MY_STORE, CA_STORE или ROOT_STORE из Java через JCSP происходит такая же валидация всех сертификатов в указанных хранилищах, и идет сетевое обращение на сервера УЦ, из-за чего работа с этими хранилищами может занимать до получаса, если отключить сеть, то все работает за миллисекунды.
Offline biff  
#10 Оставлено : 25 июля 2022 г. 17:25:59(UTC)
biff

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

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

Цитата:

Получается, что чтобы получить приватный ключ мне нужно брать его из HD_IMAGE, а как получить всю цепочку сертификатов от оригинального pfx?

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