Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Наверное, я тут за не штатного тестера устроился. Все пытаюсь осилить JCSP. Читаем документ ЖТЯИ.00087-01 90 09. Руководство программиста.pdfРаздел 2.6.1.1.Определение типа используемого ключевого носителяКод:В криптопровайдере КриптоПро JCSP реализовано несколько типов носителей:
* имя "HDIMAGE" определяет жесткий диск;
* имя "REGISTRY" определяет реестр (в случае ОС Windows);
* другие типы носителей.
Очень интересует этот третий тип носителей. Для этих целей открываем ControlPanel в Windows системе. Видим "Container Stores". Идет "REGISTRY", "AKS VR0", "AKS ifdh 1", "AKS ifdh 0", "FAT 12_B", "FAT 12_A". Каким способом производить загрузку KeyStore, скажем из последнего носителя, с названием "FAT 12_A"? Такой способ не проходит: Код:Provider provider = Security.getProvider("JCSP");
KeyStore keyStore = KeyStore.getInstance("FAT 12_A", provider);
Провайдер пишет ошибку: Код:java.security.KeyStoreException: FAT 12_A not found
Caused by: java.security.NoSuchAlgorithmException: no such algorithm: FAT 12_A for provider JCSP
Вы же в документации обещали другие типы носителей. Да, попутный вопрос. Если ControlPanel умеет показывать список носителей, можно ли в своей программе получить этот список? Вопрос связан с тем, что на текущем этапе JCSP не умеет обращаться к хранилищу личных сертификатов ("MY"), где прописано имя контейнера закрытого ключа.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
csptest создает контейнер в \\.\FAT 12_A\container ? Приведите, пожалуйста, лог консоли. И перечислите типы в csptest: csptest -enum -provtype 75 -type PP_ENUMREADERS -info |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Выполнил Код:
> csptest -enum -provtype 75 -type PP_ENUMREADERS -info
CSP (Type:75) v4.0.9006 KC1 Release Ver:4.0.9680 OS:Windows CPU:IA32 FastCode:READY:SSSE3,AVX.
CryptAcquireContext succeeded.HCRYPTPROV: 4972920
GetProvParam(...PP_ENUMREADERS...) until it returns false
Len Byte NickName/Name
_____________________________
0x012a 0x90 REGISTRY
Реестр
0x012a 0x72 AKS VR 0
AKS VR 0
0x012a 0x72 AKS ifdh 1
AKS ifdh 1
0x012a 0x72 AKS ifdh 0
AKS ifdh 0
0x012a 0x78 FAT12_B
Диск B
0x012a 0x78 FAT12_A
Диск A
Cycle exit when getting data. 6 items found. Level completed without problems.
Total: SYS: 0,190 sec USR: 0,110 sec UTC: 0,286 sec
[ErrorCode: 0x00000000]
Исправил у себя ошибку. Убрал пробел в названии контейнера. "FAT 12_A" -> "FAT12_A". Тест показал ключи. В базовой CSP это было как-то проще. Через панель управления регистрирую ключ из контейнера в личных сертификатах. CSP сама перебирает носители и поднимает ключ по названию. Ну, это как бы, я переставляю дискету из дисковода А в дисковод В или на USB-Flash носитель и вставляю его в разные USB порты. Есть ли такой универсальный псевдоним KeyStore, который сам найдет закрытый ключ по его названию?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
Автор: miser Если ControlPanel умеет показывать список носителей, можно ли в своей программе получить этот список? Такой вызов должен выдавать список: Код:
Vector stores = ru.CryptoPro.JCSP.KeyStore.KeyStoreConfig.getNames();
Автор: miser Есть ли такой универсальный псевдоним KeyStore, который сам найдет закрытый ключ по его названию? Нет. Отредактировано пользователем 29 января 2016 г. 14:26:23(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Получилось. Теперь бы еще один секрет раскрыть - названия ключей с русскими буквами. В теме "ControlPanel под Linux" я показывал, что на экране не отображаются русские буквы. То же самое происходит у меня в Java тестах под Windows. В консоли русские буквы видны Код:> csptest -keyset -enum_cont -fqcn -verifyc
CSP (Type:80) v4.0.9006 KC1 Release Ver:4.0.9680 OS:Windows CPU:IA32 FastCode:READY:SSSE3,AVX.
AcquireContext: OK. HCRYPTPROV: 4579888
\\.\FAT12_A\УККДжони Тэйлор Кори
...
OK.
Total: SYS: 0,110 sec USR: 0,150 sec UTC: 0,401 sec
[ErrorCode: 0x00000000]
В ControlPanel русские буквы видны. А в печатаемой строке java Код:for(Enumeration<String> aliases = keyStore.aliases(); aliases.hasMoreElements(); ) {
String readKeyAlias = aliases.nextElement();
System.out.printf("Проверяем ключ \"%s\" в хранилище \"%s\"\n", readKeyAlias, keyStoreType);
}
выдается текст: Код:Проверяем ключ "�������� ������ ����" в хранилище "FAT12_A"
Отредактировано пользователем 29 января 2016 г. 16:24:47(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 21.11.2010(UTC) Сообщений: 1,113
Сказал(а) «Спасибо»: 7 раз Поблагодарили: 153 раз в 138 постах
|
Код:java -Dfile.encoding=Кодировка.Консоли ...
Ещё можно IBM JRE использовать - там автоопределение работает
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Цитата:Ещё можно IBM JRE использовать - там автоопределение работает Честно, это не вариант, а так, полумера, для проведения Unit тестов. Вы так и будете каждый раз, при обращении к псевдонимам ключей, переключать кодовую страницу консоли? JCSP отдает строку и она обязана соответствовать стандартам JVM. Это 2 байта на символ, что соответствует UTF-16. Если бы отдавался массив байт, тогда бы применили нужную кодировку. Но вот, какую, это не известно. Под Windows - надо читать в Cp866, а под Linux - читать в Cp1251 (Windows-1251). Ну и как, будем играть в "угадай слово" в вашей операционной системе?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 21.11.2010(UTC) Сообщений: 1,113
Сказал(а) «Спасибо»: 7 раз Поблагодарили: 153 раз в 138 постах
|
Во-первых, если линуксовая консоль использует UTF8, то никаких проблем не должно быть. По крайней мере "Привет, мир?" выдаётся корректно. Вот если ставить всякие противоестественные варианты ...
С виндовой консолью всё несколько сложнее ... По умолчанию кодировка вывода для Oracle Java совпадает с системным file.encoding и для винды это ANSI-кодировка (Windows-1251 для России). Но, по историческим причинам, консоль использует OEM-кодировку (Cp866 для России) и IBM J9 это учитывает (есть и автоопределение и отдельное свойство), а Oracle Hotspot - нет (единый file.encoding или "индивидуальный террор").
Поэтому "сол пишется с мягким знаком, вилька и тарелька - бэз. Дэти, это нелзя панят - эта нада запомныт!". Или ставим кодировку (виндовой) консоли в Cp1251, когда это возможно или задаём нужное значение file.encoding. В линуксах просто не выёживаемся и используем UTF8.
P.S. В виндах у UTF8-консоли (Cp65001) есть проблемы, поэтому для Oracle Java универсального рецепта нет.
P.P.S. Так и не понял в чём трагедия дописать "chcp 1251" в начало скрипта. Нет, я в курсе разных проблем и вариантов, но трагедия-то в чём?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,003 Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 714 раз в 674 постах
|
miser, спасибо, проверим информацию. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 14.03.2011(UTC) Сообщений: 153 Откуда: Санкт-Петербург Сказал «Спасибо»: 1 раз Поблагодарили: 7 раз в 5 постах
|
Цитата:Во-первых, если линуксовая консоль использует UTF8, то никаких проблем не должно быть Для начала, предлагаю посмотреть тему "ControlPanel под Linux". В 5-м посте пример работы программы csctest под Linux. Как видите, проблема есть. Я очень надеюсь, что разработчики исправят ошибки кодировок, как в CSP утилитах (для Linux), так и в библиотеке JCSP. Цитата:P.P.S. Так и не понял в чём трагедия дописать "chcp 1251" в начало скрипта. Нет, я в курсе разных проблем и вариантов, но трагедия-то в чём? Выскажу свое мнение по поводу "chcp". Начнем с того, что у нас клиентское или серверное решение на Java, а не файл сценария консоли (cmd для Windows или bash для Linux). В большинстве случаев мы имеем дело с много поточными приложениями. Не вдаваться в эти дебри, просто, держим в голове, что одновременно работает несколько потоков. И тут мы в одном из потоков меняем системную переменную. Должен вас огорчить, что значение системной переменной распространяется на действие всех потоков. Цитата:Или ставим кодировку (виндовой) консоли в Cp1251 Открою вам очень большой секрет. В языке C/C++ вызываем в main один раз функцию setlocale(LC_ALL, "C"). И чудо свершилось. Код ваш мог быть написан в Windows-1251 или в WCHART (UTF-16), а в консоли вы видите родные русские буквы. И ничего устанавливать не надо.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close