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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline laureli  
#1 Оставлено : 18 мая 2010 г. 14:12:51(UTC)
laureli

Статус: Участник

Группы: Участники
Зарегистрирован: 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.
Почему я не могу получить ключ и сертификат из временного хранилища?
Спасибо.
Offline Iva  
#2 Оставлено : 18 мая 2010 г. 15:41:46(UTC)
Iva

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

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

Проверил, работает.
Если исключить ошибку в тесте, то вероятно две части Вашего кода выполняются в разных ClassLoader-ах.
Offline zakkerone  
#3 Оставлено : 25 октября 2010 г. 16:00:47(UTC)
zakkerone

Статус: Участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Iva  
#4 Оставлено : 26 октября 2010 г. 17:41:15(UTC)
Iva

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

Группы: Участники
Зарегистрирован: 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");
    }
}

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