Linux: Не загружается keyStore (Keys loading error)

Автор shirshova.a, 22 Июль 2015, 11:43:26

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

Вниз

shirshova.a

22 Июль 2015, 11:43:26 Последнее редактирование: 22 Июль 2015, 17:08:06 от shirshova.a
Добрый день,
при загрузке keyStore возникает постоянно такая ошибка:
java.lang.RuntimeException: Keys loading error. Possible cause: password is incorrect.
   at kz.gamma.jce.provider.JDKKeyStore.loadUrlOrProfile(JDKKeyStore.java:298)
   at kz.gamma.jce.provider.JDKKeyStoreProfile.engineLoad(JDKKeyStoreProfile.java:45)
   at java.security.KeyStore.load(KeyStore.java:1445)
   at ru.softlogic.processing.gates.kcmr.GammaSignGenerator.loadKeyStore(GammaSignGenerator.java:150)
   at ru.softlogic.processing.gates.kcmr.GammaSignGenerator.<init>(GammaSignGenerator.java:61)

Загружаю таким образом:
KeyStore store = KeyStore.getInstance("GKS", GammaTechProvider.PROVIDER_NAME);
store.load(new ByteArrayInputStream(profileName.getBytes(Charsets.UTF_8)), password.toCharArray());

где profileName="profile://1"
В cptumar в Linux прописано:
1=file://1:hex=***@//home/svr/svnsandbox/keystore?ext=p12

Это строка была взята из cptumar.conf файла на windows (поправила только путь к контейнеру сертификату 1.p12)
в настройках профайла в TumarCSP на  windows данному контейнеру был установлен ключ

как правильно прописать значение: password?
password =" hex=***" или тот пароль который был настроен в TumarCSP?
Пробовала прописывать без пароля:
1=file://1@//home/svr/svnsandbox/keystore?ext=p12 в cptumar.conf на Linux
но не помогло

Sergey

Добрый день.

Можно пойти 2 путями:
1. Прописать в conf файле 1=file://1@//home/svr/svnsandbox/keystore?ext=p12 и загрузить его как:

   public static KeyStore loadKeyStore(String profileName, String pass) throws NoSuchProviderException, KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
        KeyStore store = KeyStore.getInstance("GKS", "GAMMA");
        store.load(new ByteArrayInputStream(profileName.getBytes()), pass.toCharArray());
        return store;
    }

2. Ничего не прописывать в профайле а загружать следующим кодом:
public static KeyStore loadKeyStorep12(String fileName, String pass) throws NoSuchProviderException, KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
        KeyStore store = KeyStore.getInstance("PKCS12", "GAMMA");
        store.load(new ByteArrayInputStream(fileName.getBytes()), pass.toCharArray());
        return store;
    }

shirshova.a

Первый вариант ни к чему новому не привёл, ошибка та же возвращается.
Второй вариант привёл к новой ошибке: AlgId not found

Sergey

Какого уровня криптопровайдер на Linux?
Какие ключи пытаетесь загрузить (алгоритм, если RSA то размер)?

shirshova.a


Sergey

Выложите результат работы этого кода:

        Security.addProvider(new GammaTechProvider());

        int i=0;
        AlgParamUtil algParamUtil = new AlgParamUtil();
        Hashtable<Integer, Integer> algcodeid =  algParamUtil.getAlgCodeAlgId();
        for (Map.Entry<Integer, Integer> entry : algcodeid.entrySet()) {
           System.out.println(i + " - " + entry.getValue() + " : " + entry.getKey());
        }
        i=0;
        Hashtable<String, Integer> algKey = algParamUtil.getAlgKey();
        for (Map.Entry<String, Integer> entry : algKey.entrySet()) {
            System.out.println(i + " - " + entry.getValue() + " : " + entry.getKey());
        }

shirshova.a

22 Июль 2015, 16:53:36 #6 Последнее редактирование: 22 Июль 2015, 16:57:18 от Sergey
0 - 10816 : 22
0 - 42068 : 45
0 - 10810 : 21
0 - 41033 : 33
0 - 41044 : 55
0 - 41032 : 32
0 - 41031 : 31
0 - 43581 : 30
0 - 43580 : 28
0 - 43579 : 27
0 - 41030 : 25
0 - 41029 : 24
0 - 10817 : 23
0 - 41033 : 1.3.6.1.4.1.6801.1.8.9
0 - 43581 : 1.3.6.1.4.1.6801.1.5.11
0 - 41032 : 1.3.6.1.4.1.6801.1.8.15
0 - 41029 : 1.3.6.1.4.1.6801.1.8.8
0 - 43580 : 1.3.6.1.4.1.6801.1.5.10
0 - 41030 : 1.3.6.1.4.1.6801.1.8.14
0 - 41031 : 1.3.6.1.4.1.6801.1.8.10
0 - 43579 : 1.3.6.1.4.1.6801.1.5.9
0 - 43578 : 1.3.6.1.4.1.6801.1.5.8
0 - 42068 : 1.3.6.1.4.1.6801.1.5.24
0 - 41044 : 1.3.6.1.4.1.6801.1.8.24
0 - 10817 : 1.2.398.3.10.1.1.1.1.3
0 - 10816 : 1.2.398.3.10.1.1.1.1.2
0 - 10810 : 1.2.398.3.10.1.1.1.1.1
0 - 43585 : 1.3.6.1.4.1.6801.1.5.15
0 - 43584 : 1.3.6.1.4.1.6801.1.5.14

Sergey

22 Июль 2015, 16:57:50 #7 Последнее редактирование: 22 Июль 2015, 17:06:45 от Sergey
А где были получены ключи с таким не совсем стандартным алгоритмом?
Данный код был запущен на том же крипопровайдере где не работает?

shirshova.a

Почему не совсем стандартный?
(Возможно не правильно описала название алгоритма, на скриншоте более полно описано)

Да, код был запущен на том же компьютере где и не проходит загрузка keyStore.

Sergey

Да ключи нормальные, но не нормальное поведение JCE провайдера в Java.
Возможно используется старая версия JCE/JCA провайдера.
Какую версию используете crypto.gammaprov.jar?
Какой Linux используете?

shirshova.a

ОС: fedora
как определить версию crypto.gammaprov.jar?

Sergey

В манифесте jar файла MANIFEST.MF если открыть его архиватором поля Specification-Version: и Build:
Какая битность системы 32 или 64?

shirshova.a

32 битная система
Specification-Version: 2.0.1.1076
built-date: 27-06-2014 9:45:34

Renat

Добрый день. Если на ключевой контейнер установлен пароль, то простым копированием профиля из Windows в *nix и заменой пути не обойтись.
Из /TumarCSP/etc/cptumar.conf удалите все содержимое.
Выполните код

import kz.gamma.tumarcsp.LibraryWrapper;
import kz.gamma.tumarcsp.profile.ProfileCreator;
...
ProfileCreator profileCreator = new ProfileCreator();
profileCreator.createProfile("1", "file", "1", "1234567890", "/home/svr/svnsandbox/keystore", "pfx", LibraryWrapper.DEFAULT_ALG_EXCH, LibraryWrapper.DEFAULT_ALG_SIGN);

Этот код создаст профиль с наименованием "1", который указывает на ключевой контейнер "/home/svr/svnsandbox/keystore/1.pfx" с паролем "1234567890". Если у Вас используются какие-то другие параметры (наименование файла, расширение файла, пароль и т.д.), то передавайте их в метод createProfile.
После этого можете использовать этот профиль в своем коде для доступа к ключевому контейнеру.
Ключевой контейнер, который Вы используете, каким криптопровайдером был сгенерирован, и в каком УЦ на него был выпущен сертификат?

shirshova.a

спасибо всем за помощь  :)
В итоге всё оказалось проще: в cptumar.conf скопировала строку из "Строки профайла"(в винде зашла в тумар, кликнула по профайлу и в новом окне нашла это поле), добавив перед ней название профайла. Далее обычной загрузкой по имени профайла и паролю установленному на нём(не в hex, а в обычном виде) ключ нормально загрузился :) (Программно профайл не стала создавать, он так считался)

Вверх