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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline ivanko  
#1 Оставлено : 19 ноября 2020 г. 13:09:25(UTC)
ivanko

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 3 раз в 2 постах
Поиск по сертификату в сервисе кэширования

Уважаемые коллеги!

Столкнулись вот с чем - JCSP не может найти ключевой контейнер по сертификату, если ключевой контейнер был закеширован в службе кэширования ключевых сертификатов, а ключевой носитель извлечен из системы.

Версия JCSP v5.0.40424 (правда написано, что License: 4.0)
CryptoPro CSP - 4.0.9963

Сценарий
Создать виртуальную дискету ImDrive
Распаковать архив с каталогами .000

Открыть апплет СryptoPro CSP панели управления, закладкa "service", кнопка "view certificates in container".

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

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

Выполнить обращение к ключам с вводом пина и проставлением галочки.

И дальше
Код:

		X509Certificate c = getCrt();
		String alias = "...";"
	    for (Object storeT : KeyStoreConfig.getInstance().getNames()) {
        	KeyStore store = KeyStore.getInstance(String.valueOf(storeT), JCSP.PROVIDER_NAME);
	        store.load(null, null);
		log("Store type: " + storeT);

	        String A = store.getCertificateAlias(c);
		log("Searching by crt " + crtFileName);
		log(A);

        	Object c = (X509Certificate)store.getCertificate(alias);

		Enumeration<String> enumeration = store.aliases();
        	while (enumeration.hasMoreElements()) {
                	String alias1 = enumeration.nextElement();
	                log("Alias: " + alias1);
        	}
	        if(null != c){
			log("alias "+alias+" was found in "+ String.valueOf(storeT));
            		ks = store;
	        }
	    }


выдает вот такой вывод
Код:

//  вывод getCrt
Crt loaded CN=***** ******* *******, EMAILADDRESS=*******@rosenergo.com, OID.1.2.840.113549.1.9.2=NPADMNTS
// Поиск по носителю REGISTRY
Store type: REGISTRY
Searching by crt roslov.crt.cer
null
alias roslov190220287caa8f-a18f-45be-ade0-dde5142aeb78-copy was found in REGISTRY
// Поиск по носителю FAT12_E
Store type: FAT12_E
Searching by crt roslov.crt.cer
null
Alias: le-4a602b0a-f3da-411e-a6ee-79dde50f0907
Alias: le-e3a4030c-d46f-4cf1-8c57-c205544da382
Alias: te-f8d70535-ee62-4ac4-8b27-ceae5153db56
Alias: soi2_kovalenko_ig_ats
Alias: testovich_1_12_2022
Alias: soi2_ivan4
alias roslov190220287caa8f-a18f-45be-ade0-dde5142aeb78-copy was found in FAT12_E



То есть закешированный ключевой контейнер определяется во всех ключевых носителях, но по сертификату не находится. Вопрос как получить возможность доступа к ключевому контейнеру (и выполнения криптографических операций) по сертификату или каким-то атрибутам сертификата (hash, sn и issuer) ?
Offline Евгений Афанасьев  
#2 Оставлено : 19 ноября 2020 г. 16:42:16(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 15 раз
Поблагодарили: 529 раз в 507 постах
Здравствуйте.
То есть не работает поиск с помощью store.getCertificateAlias(c), где с - сертификат? В сам ключевой контейнер сертификат установлен? Так как при таком поиске сертификат берется из ключевого контейнера и сравнивается с тем, что передали в функцию.

Отредактировано пользователем 19 ноября 2020 г. 16:43:26(UTC)  | Причина: Не указана

Offline ivanko  
#3 Оставлено : 19 ноября 2020 г. 22:21:09(UTC)
ivanko

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 3 раз в 2 постах
Как это узнать?
Открыл апплет CryptoProCSP.
Получил список доступных (Friendly Names) контейнеров для просмотра сертификата
- среди них нет имени контейнера, которое используется явно, и работает для генерации подписи
UserPostedImage
Решил выбрать по сертификату
При нажатии на кнопку "By certificate" выдалось окно с сертификатом из персонального хранилища
UserPostedImage
UserPostedImage
При выборе сертификата в поле Key container name образовалось имя контейнера на носителе из которого происходило кеширование.
UserPostedImage
При нажатии кнопки next сертификат отобразился
UserPostedImage
Offline Евгений Афанасьев  
#4 Оставлено : 20 ноября 2020 г. 0:06:30(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 15 раз
Поблагодарили: 529 раз в 507 постах
Запустите панель controlpane в папке дистрибутива jcsp на той java, куда установили jcsp, и откройте контейнер там, потому что csp может показывать сертификат из системного хранилища My.
Offline ivanko  
#5 Оставлено : 20 ноября 2020 г. 0:56:15(UTC)
ivanko

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 3 раз в 2 постах
Не совсем понял как это, но пусть так.
Java установлена в c:/soi-jcsp/jdk
JCSP установлена туда же (C:\soi-jcsp\jdk\jre\lib\ext\JCPControlPane.jar)
Запустил из другого каталоге из каталога C:\soi-jcsp\jdk\bin\
C:\soi-jcsp\jdk\bin\java.exe -Dfile.encoding=cp866 ru.CryptoPro.JCP.ControlPane.MainControlPane

на вкладке keys and certifcate stores не отображается ключевой контейнер из службы кэширования
UserPostedImage
Offline Евгений Афанасьев  
#6 Оставлено : 20 ноября 2020 г. 9:31:11(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 15 раз
Поблагодарили: 529 раз в 507 постах
Запуск панели производите под тем же пользователем, что и приложение? Код перечисления контейнеров мало отличается, нужно запускать панель под тем же пользователем + проверить, нет ли в консоли, где записана команда для запуска панели, ошибок.
Offline ivanko  
#7 Оставлено : 20 ноября 2020 г. 10:19:29(UTC)
ivanko

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 3 раз в 2 постах
Да, разумеется, запуск панели и кода производится под одним пользователем.
Сейчас приложу вывод в поток ошибок при запуске панели panel.err.txt (27kb) загружен 4 раз(а).
Offline Евгений Афанасьев  
#8 Оставлено : 20 ноября 2020 г. 14:22:25(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 15 раз
Поблагодарили: 529 раз в 507 постах
Скачивается файл нулевого размера.
Offline ivanko  
#9 Оставлено : 20 ноября 2020 г. 14:54:03(UTC)
ivanko

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 3 раз в 2 постах
Файлы почему-то не грузятся
Offline Евгений Афанасьев  
#10 Оставлено : 20 ноября 2020 г. 15:48:25(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 15 раз
Поблагодарили: 529 раз в 507 постах
Если программно он виден, то и в панели должен, если пользователь тот же. Ошибок нет в консоли, хотя видно, что нет некоторых прав для доступа в реестр (RegOpenKey...error).
Попробуйте скачать JCSP новее и CSP 5.0 и проверить с ними.
Offline ivanko  
#11 Оставлено : 20 ноября 2020 г. 15:54:42(UTC)
ivanko

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 3 раз в 2 постах
Программно носитель не видно - в перечислении видны только REGISTRY и FAT12_E. Но если в апплете CryptoPro CSP искать по сертификату, то в поле unique container попадает наименование носителя и путь ключевого контейнера на нем.
Offline Евгений Афанасьев  
#12 Оставлено : 20 ноября 2020 г. 16:18:08(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 15 раз
Поблагодарили: 529 раз в 507 постах
Автор: ivanko Перейти к цитате
Программно носитель не видно - в перечислении видны только REGISTRY и FAT12_E. Но если в апплете CryptoPro CSP искать по сертификату, то в поле unique container попадает наименование носителя и путь ключевого контейнера на нем.


Вы ведь получили в коде "alias roslov190220287caa8f-a18f-45be-ade0-dde5142aeb78-copy was found in REGISTRY" - значит, контейнер получен програмно.
То, что он не найден по сертификату программно, как вы хотите, может быть связано с тем, что в контейнере нет сертификата - вы могли установить сертификат в My и связать с контейнером, потому CSP его может видеть, а JCSP - нет. Потому было предложено проверить в панели JCP - есть ли сертификат в контейнере, но контейнер не виден, возможно, нет прав. Попробуйте найти этот установленный контейнер в реестре и проверить размер его header.key. Еще можно приложить тест контейнера в панели CSP сюда.
Offline ivanko  
#13 Оставлено : 20 ноября 2020 г. 16:37:57(UTC)
ivanko

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 3 раз в 2 постах
Ни в реестре, ни в FAT12_E этого контейнера нет, потому что они не выдаются в перечислении. Но выдаются по прямому имени. Как проверить программно есть ли в контейнере сертификат или нет?

Код:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\JavaSoft]

[HKEY_CURRENT_USER\Software\JavaSoft\Prefs]

[HKEY_CURRENT_USER\Software\JavaSoft\Prefs\ru]

[HKEY_CURRENT_USER\Software\JavaSoft\Prefs\ru\/Crypto/Pro]

[HKEY_CURRENT_USER\Software\JavaSoft\Prefs\ru\/Crypto/Pro\/J/C/P]

[HKEY_CURRENT_USER\Software\JavaSoft\Prefs\ru\/Crypto/Pro\/J/C/P\/Control/Pane]
"trusts"=""
"/J/C/P/Dialog_parametres_/Input/Password_pos/X"="10"
"/J/C/P/Dialog_parametres_/Input/Password_pos/Y"="10"


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

Offline Евгений Афанасьев  
#14 Оставлено : 20 ноября 2020 г. 16:42:02(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 15 раз
Поблагодарили: 529 раз в 507 постах
alias roslov190220287caa8f-a18f-45be-ade0-dde5142aeb78-copy - это не он?
"Ни в реестре, ни в FAT12_E этого контейнера нет, потому что они не выдаются в перечислении. Но выдаются по прямому имени." -фраза непонятна. Если контейнера нет, то он никак не будет выдан. Если он выдается - то он есть, и если это roslov190220287caa8f-a18f-45be-ade0-dde5142aeb78-copy - то, как написано в вашем логе, он в реестре.
Программно: Object c = (X509Certificate)store.getCertificate(alias); в вашем коде.

Отредактировано пользователем 20 ноября 2020 г. 16:42:33(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#15 Оставлено : 20 ноября 2020 г. 16:43:52(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 15 раз
Поблагодарили: 529 раз в 507 постах
Автор: ivanko Перейти к цитате

Код:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\JavaSoft]

[HKEY_CURRENT_USER\Software\JavaSoft\Prefs]

[HKEY_CURRENT_USER\Software\JavaSoft\Prefs\ru]

[HKEY_CURRENT_USER\Software\JavaSoft\Prefs\ru\/Crypto/Pro]

[HKEY_CURRENT_USER\Software\JavaSoft\Prefs\ru\/Crypto/Pro\/J/C/P]

[HKEY_CURRENT_USER\Software\JavaSoft\Prefs\ru\/Crypto/Pro\/J/C/P\/Control/Pane]
"trusts"=""
"/J/C/P/Dialog_parametres_/Input/Password_pos/X"="10"
"/J/C/P/Dialog_parametres_/Input/Password_pos/Y"="10"

Это настройки JCP/JCSP, к месту хранения контейнеров отношения не имеют.

Offline ivanko  
#16 Оставлено : 21 ноября 2020 г. 10:31:22(UTC)
ivanko

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 3 раз в 2 постах
Автор: Евгений Афанасьев Перейти к цитате
alias roslov190220287caa8f-a18f-45be-ade0-dde5142aeb78-copy - это не он?

Это он, но его физически нет ни в реестре, ни на дискете. Он лежит в сервисе кеширования.
Автор: Евгений Афанасьев Перейти к цитате

"Ни в реестре, ни в FAT12_E этого контейнера нет, потому что они не выдаются в перечислении. Но выдаются по прямому имени." -фраза непонятна. Если контейнера нет, то он никак не будет выдан. Если он выдается - то он есть, и если это roslov190220287caa8f-a18f-45be-ade0-dde5142aeb78-copy - то, как написано в вашем логе, он в реестре.
Программно: Object c = (X509Certificate)store.getCertificate(alias); в вашем коде.


Так, чтобы не было разночтений.
Я взял вот такой код


Что в нем происходит - перечисляем хранилища, в каждом делаем так - сначала пытаемся получить имя контейнера по сертификату. Потом явно ищем имя контейнера. Потом перечисляем контейнеры в хранилище.

Результат


Выходит, что нужный (кэшированный) контейнер в обоих хранилищах, но в перечислении не выводится. То есть обращения к штатным хранилищам перехватывает служба кеширования, которая на прямой запрос может отдать кешированный контейнер, а операции перечисления и поиска по сертификату пропускает прямо в хранилище, никак не модифицируя ответ.
И сразу ответ про сертификат в контейнере - очевидно, он там есть, раз в прямом доступе возвращается сертификат, связанный с ключом, а не null.

Вопрос - как можно обратиться к хранилищу службы кеширования? учитывая, что носитель с которого кешировали ключевой контейнер в системе не присутствует.
Offline Евгений Афанасьев  
#17 Оставлено : 21 ноября 2020 г. 10:46:34(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 15 раз
Поблагодарили: 529 раз в 507 постах
То ест проблема в том, что при перечислении контейнер не виден, только при явном обращении к нему по имени?

Отредактировано пользователем 21 ноября 2020 г. 10:48:25(UTC)  | Причина: Не указана

Offline ivanko  
#18 Оставлено : 21 ноября 2020 г. 10:57:06(UTC)
ivanko

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 3 раз в 2 постах
Да, именно в этом проблема. Имена контейнеров - это слишком низкий уровень абстракции для нашего процесса и хочется как в Delphi получать контейнер по сертификату.
Offline Евгений Афанасьев  
#19 Оставлено : 21 ноября 2020 г. 12:20:41(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 15 раз
Поблагодарили: 529 раз в 507 постах
Если контейнер не виден при перечислении, то getCertificateAlias(cert) не сработает, потому что он как раз работает через перечисление: перечисляет все алиасы, получает у них сертификаты и сравнивает с cert. Подумаем, что можно сделать.
Offline Евгений Афанасьев  
#20 Оставлено : 21 ноября 2020 г. 13:04:26(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 15 раз
Поблагодарили: 529 раз в 507 постах
Мне подсказали, что получить доступ к закешированному контейнеру можно только по имени (алиасу): "Правильный путь - открыть сертификат в хранилище, прочитать ссылку на ключ и открыть контейнер.", но пока этот такой способ в JCSP не поддерживается.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.