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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline affabilis  
#1 Оставлено : 14 января 2021 г. 22:10:49(UTC)
affabilis

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

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

Сказал(а) «Спасибо»: 1 раз
Здравствуйте.

Установил криптопро JCP на linux. На виртуалке развернул винду и поставил криптопро CSP, установил сертификат .cer и ключ .pfx, зашифровал и расшифровал произвольный файл, тут все ок. Далее экспортировал контейнер с именем по типу xxxx.000

Расшифровать пытаюсь по аналогией с этой темой https://www.cryptopro.ru/forum2/...aspx?g=posts&t=12596

Собственно если взять архив crypttests.zip из указанной выше темы и подставить в код, то все работает замечательно. При попытке использовать собственный контейнер, не получается извлечь приватный и публичный ключ из хранилища.

Пример кода:
Код:

import ru.CryptoPro.CAdES.EnvelopedSignature;
import ru.CryptoPro.CAdES.exception.EnvelopedException;
import ru.CryptoPro.Crypto.CryptoProvider;
import ru.CryptoPro.JCP.JCP;
import ru.CryptoPro.JCP.KeyStore.HDImage.HDImageStore;
import ru.CryptoPro.JCP.tools.Array;
import ru.CryptoPro.reprov.RevCheck;
import ru.CryptoPro.ssl.Provider;

import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.X509Certificate;

public class TestDecode {

    private static final String PATH = System.getProperty("user.dir") + "/src/cryptotest/";

    private static void decode(
            String encodedFile, String decodedFile, String alias, char[] password) throws Exception {

        System.out.println("Decrypting " + encodedFile);
        byte[] encoded = Array.readFile(PATH + encodedFile);

        var bais = new ByteArrayInputStream(encoded);
        EnvelopedSignature envelopedSignature = new EnvelopedSignature(bais);

        KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
        keyStore.load(null, null);

        PrivateKey privateKey = null;
        try {
            privateKey = (PrivateKey) keyStore.getKey(alias, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
        X509Certificate cert = (X509Certificate) keyStore.getCertificate(alias);

        if (null == privateKey || null == cert) {
            throw new Exception("нет ключа или серта"); // При обращении к моему контейнеру и cert и privateKey равны null
        }

        FileOutputStream decoded = new FileOutputStream(PATH + decodedFile);
        envelopedSignature.decrypt(cert, privateKey, decoded);

        decoded.close();
        System.out.println("Decrypted.");
    }

    public static void main(String[] args) throws Exception, EnvelopedException {

        Security.addProvider(new JCP()); // JCP
        Security.addProvider(new RevCheck()); // RevCheck
        Security.addProvider(new CryptoProvider()); // JCryptoP
        Security.addProvider(new Provider()); // JTLS

        HDImageStore.setDir(PATH);

        decode("123123123.txt.enc", "123123123.txt", "ec8cdfb5", null); // Мой контейнер
        // decode("key12csp01.zip.enc", "key12csp01.decoded.zip", "k1707g12", null); // Контейнер из https://www.cryptopro.ru/forum2/default.aspx?g=posts&t=12596
    }
}


При обращении к моему контейнеру и cert и privateKey равны null и программы отваливается по исключению.

Прошу помощи, что именно я делаю не так.

Отредактировано пользователем 14 января 2021 г. 22:13:07(UTC)  | Причина: Не указана

Offline Санчир Момолдаев  
#2 Оставлено : 15 января 2021 г. 4:52:37(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 275 раз в 255 постах
Добрый день!
а алиас точно совпадает?
имя каталога это обычно первые 8 символов имени контейнера(он же алиас)
Код:
KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
keyStore.load(null,null);
List<String> listAlias = Collections.list(keyStore.aliases());
for (String tmp : listAlias)
  System.out.println(tmp);
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
affabilis оставлено 15.01.2021(UTC)
Offline affabilis  
#3 Оставлено : 15 января 2021 г. 9:54:42(UTC)
affabilis

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

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

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