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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline lartok  
#1 Оставлено : 28 апреля 2016 г. 11:14:14(UTC)
lartok

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

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

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Здравствуйте! Я уже голову сломал - в чем может быть дело. Алиас, хранилище, сертификат - все видит.
Система Linux x64, JCP , JDK7
Цитата:
... java.security.ProviderException
at ru.CryptoPro.JCP.KeyStore.u.g(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.u.b(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineGetKey(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineGetKey(Unknown Source)
at java.security.KeyStore.getKey(KeyStore.java:804)
...


Доступ к папке .systemPref есть.
Использую тестовый сертификат

Дата изменения: пользователем 28 апреля 2016 г. 11:15:49(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 28 апреля 2016 г. 11:29:05(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Здравствуйте.
Приведите фрагмент кода. Какой тип хранилища? HDImageStore?
Offline lartok  
#3 Оставлено : 28 апреля 2016 г. 11:38:01(UTC)
lartok

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

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

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: afev Перейти к цитате
Здравствуйте.
Приведите фрагмент кода. Какой тип хранилища? HDImageStore?


Да HDImageStore.

Цитата:
...
PrivateKey privateKey = getPrivateKey(keyStore, certificate, keyPassword, certFilename);
if (privateKey == null)
{
throw new RuntimeException("Не найден закрытый ключ");
}

Document document = XmlUtils.deserialize(xmlFragment);
...


...

Цитата:
private static PrivateKey getPrivateKey(KeyStore keyStore, X509Certificate certificate, String password, String certFilename)
throws KeyStoreException, CertificateEncodingException, NoSuchAlgorithmException, UnrecoverableKeyException
{
PrivateKey result = null;

Enumeration aliases = keyStore.aliases();
String alias = JcpUtils.getAlias(certFilename);
if (alias == null) {
while (aliases.hasMoreElements())
{
alias = (String)aliases.nextElement();

if (keyStore.isKeyEntry(alias))
{
Key key = getKey(keyStore, alias, password);
if (key instanceof PrivateKey)
{
result = (PrivateKey)key;
X509Certificate floppyCertificate = (X509Certificate)keyStore.getCertificate(alias);

if (floppyCertificate != null)
{
if (Arrays.equals(certificate.getEncoded(), floppyCertificate.getEncoded()))
return result;
else
result = null;
}
}
}
}
}
else
{
if (keyStore.isKeyEntry(alias))
{
Key key = getKey(keyStore, alias, password);
if (key instanceof PrivateKey)
{
result = (PrivateKey)key;
X509Certificate floppyCertificate = (X509Certificate)keyStore.getCertificate(alias);

if (floppyCertificate != null)
{
if (Arrays.equals(certificate.getEncoded(), floppyCertificate.getEncoded()))
return result;
else
result = null;
}
}
}
}

if ((keyStore.size() == 1) && (result != null))
return result;
else
return null;
}


на getKey ломается.

P.S.: только заметил что попадает в
Цитата:
if (alias == null) {

но если перебирать
Цитата:
String alias1 = "";
try {
Enumeration aliases = KeyStore.aliases();
while (aliases.hasMoreElements())
{
String alias = (String)aliases.nextElement();
System.out.print("alias: " + alias);
System.out.println("");
}
}

выводит Имя которое я и заводил

Отредактировано пользователем 28 апреля 2016 г. 11:43:50(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#4 Оставлено : 28 апреля 2016 г. 11:53:04(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: lartok Перейти к цитате

String alias = JcpUtils.getAlias(certFilename);
...
Key key = getKey(keyStore, alias, password);

Что за функции JcpUtils.getAlias и getKey?

И как создается/инициализируется keyStore в коде?

Отредактировано пользователем 28 апреля 2016 г. 11:54:22(UTC)  | Причина: Не указана

Offline lartok  
#5 Оставлено : 28 апреля 2016 г. 12:13:28(UTC)
lartok

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

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

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: afev Перейти к цитате
Автор: lartok Перейти к цитате

String alias = JcpUtils.getAlias(certFilename);
...
Key key = getKey(keyStore, alias, password);

Что за функции JcpUtils.getAlias и getKey?

И как создается/инициализируется keyStore в коде?


Цитата:
private static KeyStore KeyStore;
...
public static String getAlias(String fileoralias)
throws KeyStoreException
{
if (fileoralias == null) return null;
Enumeration aliasesEnum = KeyStore.aliases();
String result = null;
while (aliasesEnum.hasMoreElements()) {
String alias = aliasesEnum.nextElement().toString();
if (alias.indexOf(fileoralias)!= -1) {
result = alias;
break;
}

}
return result;
}


Цитата:
private static Key getKey(KeyStore keyStore, String Alias, String Password)
throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException
{
Key key;

if (Password != null)
{
key = keyStore.getKey(Alias, Password.toCharArray());
}
else
{
key = keyStore.getKey(Alias, null);
}
return key;
}


KeyStore.getInstance("HDImageStore");
Offline Евгений Афанасьев  
#6 Оставлено : 28 апреля 2016 г. 12:35:12(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
keyStore.load(null, null) при этом вызывается после KeyStore keyStore = KeyStore.getInstance("HDImageStore");?
Offline lartok  
#7 Оставлено : 28 апреля 2016 г. 12:55:00(UTC)
lartok

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

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

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: afev Перейти к цитате
keyStore.load(null, null) при этом вызывается после KeyStore keyStore = KeyStore.getInstance("HDImageStore");?


Alias получаю не null - пробовал и keyStore.load(null, null) и без. Разницы нет.

Цитата:
at java.security.KeyStore.getKey(KeyStore.java:804)


Команда
csptest -keyset -enum_cont -verifycontext -fqcn
контейнер выводит

Команда
Перечисление контейнеров компьютера:
csptest -keyset -enum_cont -verifycontext -fqcn -machinekeys

Контейнеров не выводит. Может в настройке КриптоПро JCP я где-то ошибся.

Отредактировано пользователем 28 апреля 2016 г. 13:04:37(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#8 Оставлено : 28 апреля 2016 г. 13:43:23(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Можете проверить так (3 строчки):
Код:

KeyStore keyStore = KeyStore.getInstance("HDImageStore");
keyStore.load(null, null);
Key key = keyStore.getKey(<alias>, <password>);
Offline lartok  
#9 Оставлено : 28 апреля 2016 г. 14:10:39(UTC)
lartok

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

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

Сказал(а) «Спасибо»: 9 раз
Поблагодарили: 1 раз в 1 постах
Автор: afev Перейти к цитате
Можете проверить так (3 строчки):
Код:

KeyStore keyStore = KeyStore.getInstance("HDImageStore");
keyStore.load(null, null);
Key key = keyStore.getKey(<alias>, <password>);


Просто 3 строки
Цитата:
java.security.KeyStoreException: HDImageStore not found
at java.security.KeyStore.getInstance(KeyStore.java:628)


с Инициализацией
Цитата:
ru.CryptoPro.JCP.JCP jcp = new ru.CryptoPro.JCP.JCP();
if (Security.getProvider(jcp.getName()) == null)
{
Security.addProvider(jcp);
}

if (!ru.CryptoPro.JCPxml.xmldsig.JCPXMLDSigInit.isInitialized())
{
ru.CryptoPro.JCPxml.xmldsig.JCPXMLDSigInit.init();
}

if (!Init.isInitialized())
{
Init.init();
}


Цитата:
java.security.ProviderException
at ru.CryptoPro.JCP.KeyStore.u.g(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.u.b(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineGetKey(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineGetKey(Unknown Source)
at java.security.KeyStore.getKey(KeyStore.java:804)
Offline Евгений Афанасьев  
#10 Оставлено : 28 апреля 2016 г. 14:40:17(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: lartok Перейти к цитате
ru.CryptoPro.JCP.JCP jcp = new ru.CryptoPro.JCP.JCP();
if (Security.getProvider(jcp.getName()) == null)
{
Security.addProvider(jcp);
}


У вас JCP установлен? Он должен быть установлен в jre/lib/ext. Если нет (просто скопирован в виде jar и загружается с помощью addProvider), то корректность функционирования не гарантируется. Попробуйте установить jcp в jre и выполнить консольное приложение с теми 3-мя строчками кода - ключ должен загрузится.

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