Статус: Участник
Группы: Участники
Зарегистрирован: 05.03.2020(UTC) Сообщений: 29 
|
Добрый день! Имеется .pem файл с содержимым вида: Цитата:-----BEGIN PRIVATE KEY----- MEgCAQAwHwYIKoUDBwEBAQEwEwYHKoUDAgIkAAYIKoUDBwEBAgIEIgQgp3M+ctHb ingDcHWgE0uzqoJkykQhG2fjAv63l9Wnu1g= -----END PRIVATE KEY----- Пытаемся на Java вытянуть из этого файла PrivateKey. Соответственно получаем Цитата:java.security.spec.InvalidKeySpecException Здесь - stackoverflow приводится решение, в котором говорится, что необходимо добавить информацию об алгоритме ключа, что мы сделали следующим образом: Код:
byte[] data = Base64.getDecoder().decode(builder.toString());
ASN1EncodableVector v = new ASN1EncodableVector();
v.add(new ASN1Integer(0));
ASN1EncodableVector v2 = new ASN1EncodableVector();
v2.add(new ASN1ObjectIdentifier("1.2.643.7.1.1.3.2"));
v2.add(DERNull.INSTANCE);
v.add(new DERSequence(v2));
v.add(new DEROctetString(data));
ASN1Sequence seq = new DERSequence(v);
byte[] privKey = seq.getEncoded("DER");
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(privKey);
KeyFactory fact = KeyFactory.getInstance("GOST3410_2012_256");
key = fact.generatePrivate(spec);
Тем не менее, ошибка так же самая: Цитата: Exception in thread "main" java.security.spec.InvalidKeySpecException at ru.CryptoPro.JCP.Key.GostKeyFactory.engineGeneratePrivate(Unknown Source) at java.base/java.security.KeyFactory.generatePrivate(KeyFactory.java:390)
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 05.03.2020(UTC) Сообщений: 29 
|
НАША ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕЙСТВИЙ: 1. Имеем pfx файл с key-pair от тестового УЦ. С помощью КриптоПРО CSP произведен экспорт, после чего получили keystore.000 (обычная папка) с содержимым: header.key masks.key masks2.key name.key primary.key primary2.key 2. Далее конвертировали в pem (открытый ключ cert.pem и закрытый ключ key.pem) 3. С помощью OpenSSL с поддержкой ГОСТ2012 конвертировали .pem в .p12 хранилище При этом, если например открыть такой файл через ПО "KeyStore Explorer" он показывает privateKey как "locked" и при попытке его "разлочить" выдает сообщение "Encoded key spec not recognized: unknown tag 30 encountered" При попытке извлечения закрытого ключа на Java из .p12 Код:
InputStream is = new FileInputStream("D:/keystore.p12");
String p12Password = "12345";
KeyStore keystore = KeyStore.getInstance("PKCS12");
keystore.load(is, p12Password.toCharArray());
PrivateKey key = (PrivateKey) keystore.getKey("keystore", p12Password.toCharArray());
вылетает Цитата:exception: java.security.spec.InvalidKeySpecException at ru.CryptoPro.JCP.Key.GostKeyFactory.engineGeneratePrivate(Unknown Source) 4. При попытке извлечения закрытого ключа на Java из .pem описано в шапке темы Пожалуйста подскажите, в чем может быть проблема? Наши тестовые ключи и сертификаты -  pem and p12 keystore.rar (3kb) загружен 1 раз(а).Отредактировано пользователем 5 лет назад
| Причина: Не указана
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602  Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 396 раз в 366 постах
|
Вопрос в том, чего Вы хотите добиться? Странно, что смотрите на stackoverflow хотя конкретно на этом форуме есть исчерпывающие инструкции. Правильный ответ: скопировать папку с 6 файлами .key полученными на первом шаге в определенную папку, где КриптоПро JCP/JCSP увидит ее и опознает как контейнер. Расположение зависит от ОС, на которой работает Джава, можете посмотреть в соседних темах. К слову, формат p12 и pfx это одно и то же, может отличаться только шифрование содержимого и алгоритмы хэшей. С таким же результатом могли подсунуть файл от УЦ вместо p12. Загрузка из .pem файлов в КриптоПро (насколько я понимаю) не поддерживается в принципе. Аналогично как и выгрузка в .pem файлы не поддерживается штатными способами. Причина - экспорт ключа в незашифрованный формат противоречит требованиям сертификации и соответственно импорт тоже не реализован. Вероятно Вы нестандартными средствами вытащили из контейнера КриптоПро или из pfx файла в неподдерживаемый формат pem (шаг 2) и теперь пытаетесь передать его обратно стандартным средствам? Если же Вы получили экземпляр класса PrivateKey из стандартных средств КриптоПро и сохранили его в файл, то так работать не будет. Стандартные средства возвращают не сам закрытый ключ, а дескриптор ключа - как только дескриптор закроется, файл с дескриптором станет бесполезен. Для обычной программы реальный закрытый ключ не нужен, поэтому достаточно дескриптора в PrivateKey, который при криптооперации попадет в обратно криптопровайдер, привязанный к конкретному экземпляру PrivateKey. Однако вытащить таким способом реальный закрытый ключ нельзя. Отредактировано пользователем 5 лет назад
| Причина: опечатки
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,020  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 721 раз в 680 постах
|
Здравствуйте. JCP не поддерживает PKCS12. Java CSP поддерживает тип "PFX" (...KeyStore.getInstance("PFX", "JCSP")...) для ключей, экспортированных в этом формате из КриптоПро CSP. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 05.03.2020(UTC) Сообщений: 29 
|
Всем отписавшимся спасибо! По итогу всё решилось работой с HDImageKeyStore (папка с 6ю файлами .key)
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 07.06.2023(UTC) Сообщений: 6
|
На случай, если кто-то ещё наткнётся на эту тему - из PEM файлов можно сконвертировать в PFX формат, понятный КриптоПро: Код:openssl pkcs12 -engine gost -export -inkey ключ.pem -in сертификат.cer -export -out результат.pfx -keypbe gost89
Разумеется, OpenSSL должна быть скомпилирована с поддержкой gost-engine.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close