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

Уведомление

Icon
Error

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

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

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

Сказал(а) «Спасибо»: 5 раз
Добрый день.
Тестирую работу через JCSP. Получаю две ошибки:
1. При работе через JCSP удается получить приватный ключ даже если ввели не правильный пароль.
2. Выполнение signature.sign() вызывает исключение java.security.SignatureException: Unsupported method.

При использовании JCP не встречал таких проблем.

Подскажите пожалуйста что я делаю не так?

Код:
        String alias = ...;

        KeyStore ks = KeyStore.getInstance("Aktiv Co. ruToken 0", "JCSP");

        ks.load(null);
        // Должен быть java.security.UnrecoverableKeyException, а его нет.
        PrivateKey pk = (PrivateKey) ks.getKey(alias, "wrong".toCharArray());
        // pk тут инициализирован, как будто пароль верен.
        Signature signature = Signature.getInstance("GOST3411withGOST3410EL");
        signature.initSign(pk);
        signature.update("abc".getBytes());
        
        // А здесь почему то получаем java.security.SignatureException: Unsupported method.
        byte[] signData = signature.sign();
        signature = Signature.getInstance("GOST3411withGOST3410EL", "JCSP");
        signature.initVerify(ks.getCertificate(alias).getPublicKey());
        signature.update("abc".getBytes());
        System.out.println(signature.verify(signData));

Offline Евгений Афанасьев  
#2 Оставлено : 6 сентября 2017 г. 13:05:01(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
Автор: GreyGoblin Перейти к цитате
Signature signature = Signature.getInstance("GOST3411withGOST3410EL");

Signature возьмется из того провайдера, который "выше" в списке провайдеров, вероятно, у вас это JCP. Укажите имя провайдера JCSP, как делаете далее в примере.

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
GreyGoblin оставлено 06.09.2017(UTC)
Offline GreyGoblin  
#3 Оставлено : 6 сентября 2017 г. 13:18:46(UTC)
GreyGoblin

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

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

Сказал(а) «Спасибо»: 5 раз
Автор: afev Перейти к цитате
Здравствуйте.
Автор: GreyGoblin Перейти к цитате
Signature signature = Signature.getInstance("GOST3411withGOST3410EL");

Signature возьмется из того провайдера, который "выше" в списке провайдеров, вероятно, у вас это JCP. Укажите имя провайдера JCSP, как делаете далее в примере.



Спасибо. Решив вторую проблему решилась и первая. Получается в случае с JCSP переданный пароль из java игнорируется до первой реальной попытки использования ключа, а уже когда до него дело доходит выводится нативное окошко CSP для ввода пароля и вот если пароль не введен правильно, то будет эксепшн по месту применения. Принцип понял, спасибо.
Offline Евгений Афанасьев  
#4 Оставлено : 6 сентября 2017 г. 13:40:48(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Чтобы сразу передать пароль, можно использовать getEntry/setEntry (они работает без окон).
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
GreyGoblin оставлено 06.09.2017(UTC)
Offline zsv  
#5 Оставлено : 5 апреля 2018 г. 17:13:48(UTC)
zsv

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

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

Автор: afev Перейти к цитате
Чтобы сразу передать пароль, можно использовать getEntry/setEntry (они работает без окон).


А можно поподробнее? Как зная пароль закрытого ключа (из настроек), использовать шифрование в фоновом режиме (без окон)?

Отредактировано пользователем 5 апреля 2018 г. 17:44:14(UTC)  | Причина: Не указана

Offline zsv  
#6 Оставлено : 5 апреля 2018 г. 18:38:59(UTC)
zsv

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

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

разобрался:

Код:

KeyStore tokenStore = KeyStore.getInstance(****);
tokenStore.load(null, null);

String keyStoreAlias = "my_container";
String privateKeyPassword = "qwerty1234";
PrivateKey responderKey = (PrivateKey)tokenStore.getKey(keyStoreAlias, null);

KeyStore.ProtectionParameter protectedParam = new KeyStore.PasswordProtection(privateKeyPassword.toCharArray());
KeyStore.Entry entry1 = hdImageStore.getEntry(keyStoreAlias, protectedParam);
hdImageStore.setEntry(keyStoreAlias, entry1, protectedParam);

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