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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline singSm  
#1 Оставлено : 20 октября 2015 г. 14:34:47(UTC)
singSm

Статус: Новичок

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

Имеется:
- КриптоПро CSP 3.6.7491
- Java 1.8.0_60
- eToken PKI Client 5.1 SP1 (5.1.66.0)
- Windows 7 SP1 64-разрядная

Имеется ПО, написанное на Java, которое взаимодействует с подписью. Причем ПО работает с разными хранилищами и носителями. Но вот с данным рабочим местом возникает проблема: не видит алиасы в хранилище.

Вот кусок кода, который это взаимодействие осуществляет:
Код:

import java.security.KeyStore;
import java.security.KeyStoreException;

private static KeyStore floppyStore;

//StoreName    = OCFStore
//keyPassword  = пароль
//certFilename = имя файла сертификата

public static String createSignature(String StoreName, String keyPassword)
{
	KeyStore keyStore = getFloppyStore(StoreName,keyPassword);

	Enumeration aliases = keyStore.aliases();
	String alias = getAlias(certFilename);
			
	if (alias == null) {
			while (aliases.hasMoreElements())
			{
				//В цикл уже не попадает...
				alias = (String)aliases.nextElement();
				...
}

public static KeyStore getFloppyStore(String StoreName, String keyPassword)
{
	floppyStore = KeyStore.getInstance(StoreName);
	if (floppyStore != null)
	{
			if (keyPassword == null) {
					floppyStore.load(null, null);
			}
			else {
					floppyStore.load(null, keyPassword.toCharArray());            
			}
	}
}

public static String getAlias(String fileoralias) 
        throws KeyStoreException
{
    if (fileoralias == null) return null;
    Enumeration aliasesEnum = floppyStore.aliases();
    String result = null;
    while (aliasesEnum.hasMoreElements()) {        
          String alias = aliasesEnum.nextElement().toString();                          
          if (alias.indexOf(fileoralias)!= -1) {
              result = alias;
              break;
        }
    }
    return result;
}


При вызове createSignature("OCFStore","пароль") доходит до перебора алиасов в хранилище, но перебирать нечего: aliases.hasMoreElements() возвращает false.

В чем может быть проблема? Может дело в КриптоПро? Или в носителе? В Панели настроек КриптоПро носитель видится, открывается.
Offline Евгений Афанасьев  
#2 Оставлено : 20 октября 2015 г. 14:45:06(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Здравствуйте.
А JCP какая версия?
Если убрать "Enumeration aliases = keyStore.aliases();" в строке 14, то заходит в цикл?
Offline singSm  
#3 Оставлено : 22 октября 2015 г. 11:38:21(UTC)
singSm

Статус: Новичок

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

Автор: afev Перейти к цитате
Здравствуйте.
А JCP какая версия?
Если убрать "Enumeration aliases = keyStore.aliases();" в строке 14, то заходит в цикл?

Версия JCP: 2.0.37538
Если убрать "Enumeration aliases = keyStore.aliases();", то будет ошибка компиляции, т.к. в строке 18 идет обращение к aliases, которая не определена:
Код:
while (aliases.hasMoreElements())
Offline Евгений Афанасьев  
#4 Оставлено : 22 октября 2015 г. 12:19:03(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Я имел в виду так временно модифицировать код, чтобы перечисление выполнялось один раз, допустим, в getAlias().

Отредактировано пользователем 22 октября 2015 г. 12:19:57(UTC)  | Причина: Не указана

Offline singSm  
#5 Оставлено : 22 октября 2015 г. 13:50:30(UTC)
singSm

Статус: Новичок

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

Автор: afev Перейти к цитате
Я имел в виду так временно модифицировать код, чтобы перечисление выполнялось один раз, допустим, в getAlias().

Не совсем понимаю. Если речь идет про мой метод в строке 39:
Код:
public static String getAlias(String fileoralias)

то он возвращает null. Поэтому и заходит по условию в строке 17:
Код:
if (alias == null) {

Если речь идет про какой-то другой, встроенный метод, то поясните, пожалуйста.
Offline Евгений Афанасьев  
#6 Оставлено : 22 октября 2015 г. 13:52:26(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
"Enumeration aliases = keyStore.aliases();" - aliases что-нибудь содержит, если смотреть в отладке?
Offline singSm  
#7 Оставлено : 22 октября 2015 г. 14:49:00(UTC)
singSm

Статус: Новичок

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

Автор: afev Перейти к цитате
"Enumeration aliases = keyStore.aliases();" - aliases что-нибудь содержит, если смотреть в отладке?

Полноценно (через IDE) отладку запустить не могу, т.к. это делается на клиенте. Но вывод в лог дает такой результат:
Код:
java.util.Collections$3@7fe4568
Offline singSm  
#8 Оставлено : 23 октября 2015 г. 9:00:54(UTC)
singSm

Статус: Новичок

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

afev
Может можно другими средствами КриптоПро проверить работоспособность? Может что-то не до конца установлено или не так установлено?
Offline Евгений Афанасьев  
#9 Оставлено : 23 октября 2015 г. 9:50:52(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Выведите первое же перечисление алиасов, видимо, "Enumeration aliases = keyStore.aliases();". Вероятно, оно просто пустое, список контейнеров отсутствует.
Offline singSm  
#10 Оставлено : 23 октября 2015 г. 11:27:56(UTC)
singSm

Статус: Новичок

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

Автор: afev Перейти к цитате
Выведите первое же перечисление алиасов, видимо, "Enumeration aliases = keyStore.aliases();".

Не совсем понимаю фразу. Значение aliases я выводил ранее:
Код:
java.util.Collections$3@7fe4568

Вызов:
Код:
aliases.hasMoreElements()

дает false
Вызов:
Код:
aliases.nextElement()

Дает, соответственно, ошибку.

Цитата:
Вероятно, оно просто пустое, список контейнеров отсутствует.

Если программно список контейнеров пуст, а в Панели настроек КриптоПро носитель открывается, то в чем может быть дело?

Отредактировано пользователем 23 октября 2015 г. 11:31:38(UTC)  | Причина: Не указана

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