Привожу фрагмент кода:
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)
| Причина: Дополнение сообщения.