Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.10.2019(UTC) Сообщений: 56  Откуда: Новосибирск Сказал(а) «Спасибо»: 14 раз
|
Здравствуйте. Разбираюсь как обходить проблему смены имени хранилища при подключении нескольких рутокенов. Имеется ввиду, когда имена меняются с RutokenStore на RutokenStore_3945665 и обратно. Пришел к выводу, что лучше перебирать рутокеновские хранилища через объект RutokenStore и брать из него имя и серийник посредством RutokenStore.getStoreName(i) и RutokenStore.getStoreSerial(i). Но вот беда, после команды keyStore.getCertificate(alias): Цитата: KeyStore keyStore = KeyStore.getInstance(STORE_TYPE); keyStore.load(null, pwd.toCharArray()); Certificate cert = keyStore.getCertificate(alias);
команда RutokenStore.getStoreName(0) выдаёт null. А до выполнения команды keyStore.getCertificate(alias) выдаёт правильное название стораджа. В дебагере можно увидеть, что коллекция RutokenStore.a при этом становится размером ноль. В чём может быть дело? Отредактировано пользователем 17 июля 2020 г. 11:02:39(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 24.04.2018(UTC) Сообщений: 24  Сказал(а) «Спасибо»: 2 раз Поблагодарили: 9 раз в 6 постах
|
Добрый день! Стандартный метод получения имен хранилищ Rutoken - через функцию getServices (именно этот метод и указан в нашей документации). Вот примерный код получения списка хранилищ: Код:
JCP prov = new JCP();
Set<Provider.Service> services = prov.getServices();
Vector<String> storeTypes = new Vector();
for (Provider.Service service : services) {
String serviceName = service.getType();
String algorithm = service.getAlgorithm();
if (serviceName.equals("KeyStore") && algorithm.contains("Rutoken")) {
storeTypes.add(algorithm);
} // if
}
Соответственно, далее вы разбираете: если элемент в списке один (то есть токен один), то это будет "RutokenStore". Если токенов несколько, то список будет состоять из имен формата "RutokenStore_серийныйномер». Функции, указанные вами, не предназначались для такого внешнего использования (они используются в рамках JCP). Но особенность, обнаруженная вами, интересная. Не могли бы Вы прислать код полностью, в частности, как Вы создаете объект RutokenStore (этот класс абстрактный, напрямую вызов функций не предусмотрен)? Отредактировано пользователем 18 июля 2020 г. 17:55:57(UTC)
| Причина: Не указана
|
 2 пользователей поблагодарили Elvira Borodina за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.10.2019(UTC) Сообщений: 56  Откуда: Новосибирск Сказал(а) «Спасибо»: 14 раз
|
Автор: Elvira Borodina  Функции, указанные вами, не предназначались для такого внешнего использования (они используются в рамках JCP). Но особенность, обнаруженная вами, интересная. Не могли бы Вы прислать код полностью, в частности, как Вы создаете объект RutokenStore (этот класс абстрактный, напрямую вызов функций не предусмотрен)?
Здравствуйте! Вот упрощённый пример: Код:
public Optional<Certificate> readCert(String alias, String STORE_TYPE, final String STORE_PASSWORD) throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException {
final KeyStore keyStore = KeyStore.getInstance(STORE_TYPE);
keyStore.load(null, STORE_PASSWORD.toCharArray());
System.out.println("Тут корретно выводятся имена двух рутокенов:");
for (int i = 0; i < 11; i++)
if (RutokenStore.getStoreName(i) != null)
System.out.println("Storage: " + RutokenStore.getStoreName(i) + " SN: " + RutokenStore.getStoreSerial(i));
final Certificate cert = keyStore.getCertificate(alias);
System.out.println("Тут все стораджы равняются null:");
for (int i = 0; i < 11; i++)
if (RutokenStore.getStoreName(i) != null)
System.out.println("Storage: " + RutokenStore.getStoreName(i) + " SN: " + RutokenStore.getStoreSerial(i));
return Optional.of(cert);
}
Автор: Elvira Borodina  Стандартный метод получения имен хранилищ Rutoken - через функцию getServices
Спасибо, попробую
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.10.2019(UTC) Сообщений: 56  Откуда: Новосибирск Сказал(а) «Спасибо»: 14 раз
|
А... Вспомнил почему мне общение с Рутокеном через getServices не подошло - я там не нашёл механизма получения серийного номера Рутокена. Потому и стал искать что-то недокументированное. Может быть есть возможность через getServices серийный номер получать? А то если я делаю так: Код: Provider provider = new JCP();
Set<Provider.Service> services = provider.getServices();
List<String> listStore = new ArrayList<String>();
for (Provider.Service service : services) {
if (service.getType().equalsIgnoreCase("KeyStore") && service.getAlgorithm().startsWith("RutokenStore")) {
listStore.add(service.getAlgorithm());
}
}
то могу взять серийник из getAlgorithm() только когда в машину вставленно более одного Рутокена.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 24.04.2018(UTC) Сообщений: 24  Сказал(а) «Спасибо»: 2 раз Поблагодарили: 9 раз в 6 постах
|
Добрый день! Запустила ваш код, у меня описанная вами проблема не воспроизводится, в лог выводится следующее: Код:
Тут корретно выводятся имена двух рутокенов:
Storage: RutokenStore_377079EB SN: 377079EB
Storage: RutokenStore_355F7296 SN: 355F7296
Тут все стораджы равняются null:
Storage: RutokenStore_377079EB SN: 377079EB
Storage: RutokenStore_355F7296 SN: 355F7296
Я запускала и для одного токена, и для двух. В любом случае, данным функциями из класса RutokenStore пользоваться не стоит, они не были изначально для этого предназначены. Цитата: ..то могу взять серийник из getAlgorithm() только когда в машину вставленно более одного Рутокена.
Да, это действительно так. В настоящий момент получение серийного номера напрямую не предусмотрено. Мы постараемся в ближайшее время добавить такой функционал. Пришлите ваш E-MAIL, мы пришлем вам версию JCP с этой доработкой. Отредактировано пользователем 20 июля 2020 г. 14:24:40(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил Elvira Borodina за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.10.2019(UTC) Сообщений: 56  Откуда: Новосибирск Сказал(а) «Спасибо»: 14 раз
|
Спасибо! st_aleks пёс rambler.ru
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.10.2019(UTC) Сообщений: 56  Откуда: Новосибирск Сказал(а) «Спасибо»: 14 раз
|
Автор: Elvira Borodina  Добрый день! Запустила ваш код, у меня описанная вами проблема не воспроизводится Может дело в версии, сейчас использую библиотеки JCP взятые из java-csp-5.0.40621-A. Но вобще я нашёл как победить этот сбой у меня. Если выполнить new RutokenStore001(); то RutokenStore.getStoreName(i) перестаёт быть равным null: Код:
public Optional<Certificate> readCert(String alias, String STORE_TYPE, final String STORE_PASSWORD) throws KeyStoreException, CertificateException, NoSuchAlgorithmException, IOException {
final KeyStore keyStore = KeyStore.getInstance(STORE_TYPE);
keyStore.load(null, STORE_PASSWORD.toCharArray());
System.out.println("Тут корретно выводятся имена двух рутокенов:");
for (int i = 0; i < 11; i++)
if (RutokenStore.getStoreName(i) != null)
System.out.println("Storage: " + RutokenStore.getStoreName(i) + " SN: " + RutokenStore.getStoreSerial(i));
final Certificate cert = keyStore.getCertificate(alias);
System.out.println("Тут все стораджы равняются null. Но мы сделаем new RutokenStore001();");
try {
new RutokenStore001();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Тут опять корретно выводятся имена двух рутокенов:");
for (int i = 0; i < 11; i++)
if (RutokenStore.getStoreName(i) != null)
System.out.println("Storage: " + RutokenStore.getStoreName(i) + " SN: " + RutokenStore.getStoreSerial(i));
return Optional.of(cert);
}
Написал на случай если кто тоже сталкнётся с такой же проблемой. Отредактировано пользователем 24 июля 2020 г. 5:40:21(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,006  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Спасибо за информацию, доработки будут сделаны в 2 этапа: сначала предоставить возможность узнать серийный номер токена по хранилищу, затем - улучшения в работе с рутокеном (при этом часть видимых сейчас внутренних методов и классов может стать недоступной). |
|
 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close