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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Denis-4427  
#1 Оставлено : 28 апреля 2022 г. 10:47:55(UTC)
Denis-4427

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

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

Привожу фрагмент кода:

JCSP jcspProvider = (JCSP)Security.getProvider(JCSP.PROVIDER_NAME);
if (jcspProvider == null) {
jcspProvider = new JCSP();
Security.addProvider(jcspProvider);
}
KeyStore keyStore = KeyStore.getInstance(JCSP.PFX_STORE_NAME, JCSP.PROVIDER_NAME);
char[] PASSWORD = "1".toCharArray();
keyStore.load(new FileInputStream("d:\\public\\keystore.pfx"), PASSWORD);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509", "JTLS");
System.out.println("init Key Manager Factory...");
kmf.init(keyStore, PASSWORD);

Код довольно простой. Во время работы приложения выводится следующее:
init Key Manager Factory...
Exception in thread "main" java.lang.OutOfMemoryError
at java.io.ByteArrayOutputStream.hugeCapacity(Unknown Source)
at java.io.ByteArrayOutputStream.grow(Unknown Source)
at java.io.ByteArrayOutputStream.ensureCapacity(Unknown Source)
at java.io.ByteArrayOutputStream.write(Unknown Source)
at ru.CryptoPro.JCSP.KeyStore.PFXStore.engineLoadInternal(Unknown Source)
at ru.CryptoPro.JCSP.KeyStore.MSStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(Unknown Source)
at ru.CryptoPro.ssl.cl_39.<init>(Unknown Source)
at ru.CryptoPro.ssl.KeyManagerFactoryImpl$GostX509.engineInit(Unknown Source)
at javax.net.ssl.KeyManagerFactory.init(Unknown Source)
at my.jcsp.app.App.DoInit(App.java:66)
at my.jcsp.app.App.main(App.java:94)

То есть, в строке kmf.init(keyStore, PASSWORD) кроется проблема.
Эксперименты с -Xmx и -Xms не помогли, да они и не помогут. Исключение OutOfMemoryError выбрасывает
ByteArrayOutputStream в hugeCapacity, так как, скорее всего, превышается допустимый размер данных. Не
понятно почему получается такой большой размер.
private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
Объект keyStore загружается нормально. И сертификат, и ключ, и цепочка могут быть от него получены
без проблем.
Может быть у кого-нибудь есть мысли почему выбрасывается исключение?

Отредактировано пользователем 28 апреля 2022 г. 10:53:37(UTC)  | Причина: Дополнение сообщения.

Offline Евгений Афанасьев  
#2 Оставлено : 28 апреля 2022 г. 16:23:12(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
Здравствуйте.
Сообщите, пожалуйста, версии JCSP и CSP в формате x.y.zzzzz.
JCSP задан провайдером по умолчанию в панели или программно?
Offline Denis-4427  
#3 Оставлено : 29 апреля 2022 г. 7:49:09(UTC)
Denis-4427

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

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

Здравствуйте! Спасибо за сообщение!
Я использую КриптоПро CSP 5.0.12000 КС1 и Java CSP 5.0.41975
В панели настроек КриптоПро JCP я ничего не менял: на закладке "Алгоритмы" у меня провайдером по умолчанию указан
Java Cryptographic Provider (хэш, ЭЦП) и Crypto (шифрование), а что касается заданного программно, то вот мой код
- его не много:
public class App
{
public void exec() throws Exception {
JCSP jcspProvider = (JCSP)Security.getProvider(JCSP.PROVIDER_NAME);
if (jcspProvider == null) {
jcspProvider = new JCSP();
Security.addProvider(jcspProvider);
}
/////////////////// хранилище сертификатов клиента
KeyStore keyStore = KeyStore.getInstance(JCSP.PFX_STORE_NAME, JCSP.PROVIDER_NAME);
char[] PASSWORD = "1".toCharArray();
keyStore.load(new FileInputStream("d:\\public\\keystore.pfx"), PASSWORD);
////////// фабрика клиентских сертификатов
KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509", "JTLS");
System.out.println("init Key Manager Factory ...");
kmf.init(keyStore, "1".toCharArray()); - вот тут и выбрасывается исключение
...
}

public static void main( String[] args ) throws Exception
{
App app = new App();
app.exec();
}
}
Offline Евгений Афанасьев  
#4 Оставлено : 29 апреля 2022 г. 10:09:42(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
Спасибо, проверим.

Поскольку вы используете JCSP и он у вас не провайдер по умолчанию, задайте, пожалуйста, где-то в начале
Цитата:

cpSSLConfig.setDefaultSSLProvider(JCSP.PROVIDER_NAME);
Offline Denis-4427  
#5 Оставлено : 29 апреля 2022 г. 14:49:38(UTC)
Denis-4427

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

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

Огромное спасибо Вам! Добавление
cpSSLConfig.setDefaultSSLProvider(JCSP.PROVIDER_NAME);
помогло.
Offline Евгений Афанасьев  
#6 Оставлено : 1 мая 2022 г. 23:09:33(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
Ошибку воспроизвел, спасибо, устраним.
Вообще, так как вы используете JCSP, а не JCP, JCSP должен быть у вас провайдером по умолчанию (а не JCP). Обычно провайдер по умолчанию выставляется при установке или позднее, в панели управления JCP (вкладка "Алгоритмы"), или достигается путем корректировки списка провайдеров в java.security: JCSP должен быть над JCP, либо программной корректировки списка провайдеров с помощью Security.removeProvider и Security.addProvider, или с помощью cpSSLConfig.setDefaultSSLProvider(JCSP.PROVIDER_NAME), если конкретно для cpSSL (TLS).

Отредактировано пользователем 1 мая 2022 г. 23:10:07(UTC)  | Причина: Не указана

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