Статус: Участник
Группы: Участники
Зарегистрирован: 03.09.2009(UTC) Сообщений: 18
|
Добрый день. Читаю ключ с флешки и сохраняю его в MemoryStore0 Код:
KeyStore ks = KeyStore.getInstance(store, "JCP");
ks.load(null, null);
PrivateKey pk = (PrivateKey) ks.getKey(container, password.toCharArray());
X509Certificate certificate = (X509Certificate) ks.getCertificate(container);
KeyStore ms = KeyStore.getInstance("MemoryStore0", "JCP");
ms.load(null, null);
Certificate[] chain = new Certificate[]{certificate};
ms.setKeyEntry("0", pk, password.toCharArray(), chain);
В дальнейшем вынимаю флешку и выполняю такой код Код:
KeyStore ms = KeyStore.getInstance("MemoryStore0");
ms.load(null, null);
PrivateKey pk = (PrivateKey) ms.getKey("0", password.toCharArray());
X509Certificate certificate = (X509Certificate) ms.getCertificate("0");
При этом ключ и сертификат =null. Почему я не могу получить ключ и сертификат из временного хранилища? Спасибо.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.10.2008(UTC) Сообщений: 181
|
Проверил, работает. Если исключить ошибку в тесте, то вероятно две части Вашего кода выполняются в разных ClassLoader-ах.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 26.09.2010(UTC) Сообщений: 13 Откуда: Уфа
|
код идентичный, такая же ошибка. После выгрузки ключ и сертификат равны null Решилась проблема указанием в качестве alias имени контейнера в HDImageStore JCP тоесть так: Код:
java.security.KeyStore hdImageStoreKs = null;
hdImageStoreKs = java.security.KeyStore.getInstance("HDImageStore");
hdImageStoreKs.load(null, null);
String strKeyPass = "containerPass";
java.security.PrivateKey pk = (java.security.PrivateKey) hdImageStoreKs.getKey("containerName", strKeyPass.toCharArray());
java.security.cert.X509Certificate clientCertificate = (java.security.cert.X509Certificate) hdImageStoreKs.getCertificate("containerName");
а если следовать документации, то нужно указывать "идентификатор (уникальное имя) получаемого закрытого ключа" и "пароль на ключ, установленный при записи ключа на носитель" Код:
String alias; // идентификатор (уникальное имя) получаемого закрытого ключа,
// установленный при записи ключа на носитель
char[] password;// пароль на ключ, установленный при записи ключа на носитель
PrivateKey key = (PrivateKey)ks.getKey(alias, password);
Следует отметить некоторые особенности вызова функции getKey():
параметр alias является уникальным именем получаемого закрытого ключа, которое было установлено при записи ключа на носитель. Если на заданном носителе не существует закрытого ключа с передаваемым именем alias, то вызов getKey() вернет null;
параметр password представляет собой пароль на запрашиваемый закрытый ключ, который был установлен при записи этого ключа в контейнер. Как отмечалось выше, для карточек (при инициализации ключевого хранилища JCA именем "OCFStore") пароли на все ключи, хранимые на карточке, совпадают с паролем, прошитым в карточке при ее создании.
может эта формулировка и верная итогово, типа каждому контейнеру принадлежит сертификат и ключ допустим, и получается что идентификатор получаемого закрытого ключа это и есть имя этого контейнера. Технически верно, но информация берется не сразу) и неявно Отредактировано пользователем 25 октября 2010 г. 18:42:24(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 09.10.2008(UTC) Сообщений: 181
|
Не вижу ошибку. Тест работает. Код:public static void test() throws Exception {
String container = "localhost123456";
String password = "123456";
String store = "HDImageStore";
{
KeyStore ks = KeyStore.getInstance(store, "JCP");
ks.load(null, null);
PrivateKey pk = (PrivateKey) ks.getKey(container, password.toCharArray());
X509Certificate certificate = (X509Certificate) ks.getCertificate(container);
KeyStore ms = KeyStore.getInstance("MemoryStore0", "JCP");
ms.load(null, null);
Certificate[] chain = new Certificate[]{certificate};
ms.setKeyEntry("0", pk, password.toCharArray(), chain);
}
{
KeyStore ms = KeyStore.getInstance("MemoryStore0");
ms.load(null, null);
PrivateKey pk = (PrivateKey) ms.getKey("0", password.toCharArray());
X509Certificate certificate = (X509Certificate) ms.getCertificate("0");
}
}
Опишите подробнее, что и как делаете.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close