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

Уведомление

Icon
Error

6 Страницы<1234>»
Опции
К последнему сообщению К первому непрочитанному
Offline Евгений Афанасьев  
#11 Оставлено : 4 июля 2018 г. 15:49:38(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Тестовый контейнер можно выпустить тут - https://cryptopro.ru/certsrv/
Попробую проверить с помощью csptest (команда csptest -sfse), cryptcp нечто подобное поддерживает, примеры из samples.jar (CMS_samples - типа PKCS7EnvEphTransport как с JCP, так и JCSP).
Offline Denis1499  
#12 Оставлено : 4 июля 2018 г. 17:56:30(UTC)
Denis1499

Статус: Участник

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

Спасибо!
Буду пробовать.
Offline Kirill1499  
#13 Оставлено : 18 июля 2018 г. 13:32:47(UTC)
Kirill1499

Статус: Участник

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

Afev, добрый день!
Подcкажите, с чем может быть связана данная проблема (мы работаем вместе с топикстартером).
У нас был сертификат от НБКИ от 2017 года, у этого сертификата был Signature algorithm ГОСТ Р 34.11/34.10-2001
В основном методе шифрования мы использовали:
Код:
final AlgIdInterface algid = new AlgIdSpec(JCP.GOST_EL_KEY_OID);

А в методе wrap при генерации эфемерной пары следовательно:
Код:
KeyPairGenerator kgp = KeyPairGenerator.getInstance(JCP.GOST_EL_DH_EPH_NAME, CryptoProvider.PROVIDER_NAME);


После этого нам прислали новый сертификат, у которого Signature algorithm ГОСТ Р 34.11-2012/34.10-2012 512 бит.
После этого наш метод перестал работать. Я хотел бы добавить, что этот метод шифрует и для других КБ сейчас (старый ГОСТ), и для НБКИ раньше шифровал успешно.
Правильно ли мы понимаем, что для нового сертификата по ГОСТу Р 34.11-2012/34.10-2012 512 бит, нам нужно указать какой-то другие параметры в фабричном методе, и всё должно заработать?
В каком направлении мы можем продвинуться?

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

Offline Евгений Афанасьев  
#14 Оставлено : 18 июля 2018 г. 15:22:51(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
Для ГОСТ 2012 должен использоваться соответствующий алгоритм в KeyPairGenerator, например, JCP.GOST_EPH_DH_2012_256_NAME. Для algid аналогично может быть использован, например, JCP.GOST_PARAMS_EXC_2012_256_KEY_OID. Дело, скорее всего, не в алгоритме подписи сертификата, а открытом ключе (ГОСТ 2012). У вас стала появляться ошибка на вашей стороне, в коде? Сначала я бы предложил обновить JCP до последней версии, т.к. были исправления.
Offline Kirill1499  
#15 Оставлено : 18 июля 2018 г. 16:22:20(UTC)
Kirill1499

Статус: Участник

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

afev, спасибо за оперативный ответ!
Прошу прощёния, конечно public key по новому госту - ГОСТ Р 34.10-2012 256.
Попробовал с новыми параметрами JCP.GOST_EPH_DH_2012_256_NAME/JCP.GOST_PARAMS_EXC_2012_256_KEY_OID из Вашего ответа.
К сожалению ответ от НБКИ такой же Decryption result:FAIL.

В том то и дело, что у нас в коде (они приведён выше), не появляется ошибка. Мы просто говорим, вот файл, зашифруй его этим алогоритмом и отправь.
Со старым сертификатом работало, с новым - нет.
Может быть ещё какие-нибудь параметры можно попробовать для ГОСТ Р 34.10-2012 256?
Offline Евгений Афанасьев  
#16 Оставлено : 18 июля 2018 г. 16:31:15(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Попробуйте заменить CryptParamsSpec.OID_Crypt_VerbaO на CryptParamsSpec.OID_Gost28147_89_Rosstandart_TC26_Z_ParamSet и обновить JCP.
Offline Kirill1499  
#17 Оставлено : 23 июля 2018 г. 12:45:09(UTC)
Kirill1499

Статус: Участник

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

Добрый день!
По вашей рекомендации обновились с jcp-2.0.39738, на версию jcp-2.0.38481.
Получаем такую ошибку, старая версия без проблем доставала сертификат по имени из контейнера.
Код:
public abstract Certificate engineGetCertificate(String alias);

Все сертификаты контейнера я вывожу в лог.
Там есть мой сертификат, jcp-2.0.39738 его достаёт без проблем, jcp-2.0.38481 нет.
Контейнер один и тот же, подскажите, в чём может быть проблема?

Отредактировано пользователем 23 июля 2018 г. 12:46:31(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#18 Оставлено : 23 июля 2018 г. 13:03:14(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Добрый день.
Не могли бы вы привести стек ошибки?
Последняя версия jcp - 2.0.39738
Offline Kirill1499  
#19 Оставлено : 23 июля 2018 г. 13:36:28(UTC)
Kirill1499

Статус: Участник

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

Спасибо за оперативность.
Стек ошибки - банальное NPE, которого не было на прошлой версии.
Код:
13:05:47.089 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---gost cert store path (in directory): D:/nbki_new
13:05:47.089 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---gost cert store certificates----
Jul 23, 2018 1:05:47 PM ru.CryptoPro.JCP.tools.Starter check
INFO: Loading JCP 2.0.39738
Jul 23, 2018 1:05:47 PM ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
13:05:47.964 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: le-dasdasd-8428-4e2f-88eb-dasfa4basfb8a
13:05:47.964 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: cpcacer3
13:05:47.964 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: root.cer
13:05:47.964 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: cpcacer2
13:05:47.964 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: cpcacer1
13:05:47.964 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: cpcacer0
13:05:47.965 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: cacer.cer
13:05:47.965 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: оператор нбки - 2018.cer
13:05:47.965 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: ivanov.cer
13:05:47.965 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: cpcacer5
13:05:47.965 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: cpcacer4
13:05:47.965 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ------------------------------------
Jul 23, 2018 1:05:48 PM ru.CryptoPro.ssl.cl_38 <init>
INFO: %% adding as private keys %%
13:05:48.110 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ----not gost cert store path: /D:/Source/my-app/out/test/resources/cer/store/non_gost.jks
13:05:48.111 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ----not gost cert store certificates---
13:05:48.111 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: _qiwi_com
13:05:48.111 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ---alias: 1
13:05:48.111 [main] INFO  o.occ.my-app.jcp.KeyStoreService - ----------------------------------------
Jul 23, 2018 1:05:48 PM ru.CryptoPro.ssl.SSLContextImpl engineInit
INFO: SSLContextImpl init.
Jul 23, 2018 1:05:48 PM ru.CryptoPro.ssl.SSLContextImpl engineInit
INFO: trigger seeding of SecureRandom
Jul 23, 2018 1:05:48 PM ru.CryptoPro.ssl.SSLContextImpl engineInit
INFO: done seeding SecureRandom
Jul 23, 2018 1:05:48 PM ru.CryptoPro.ssl.SSLContextImpl engineInit
INFO: SSLContextImpl initialized.

java.lang.NullPointerException
	at org.occ.my-app.jcp.SignatureService.createCMSEx(SignatureService.java:110)
	at org.occ.my-app.jcp.SignatureService.signDetached(SignatureService.java:45)
	at org.occ.my-app.service.NbkiReportingService.sign(NbkiReportingService.java:146)
	at org.occ.my-app.service.NbkiReportingService.encrypt(NbkiReportingService.java:128)
	at org.occ.my-app.service.NbkiReportingService.sendReport(NbkiReportingService.java:80)
	at org.occ.my-app.service.NbkiReportingServiceTest.testSendReport(NbkiReportingServiceTest.java:50)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:254)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)


Как видно из логов, у меня один из сертификатов под именем ivanov.cer

Список сертификатов выводит следующий код:
Код:
		logDebug("---gost cert store certificates----");
		gostCertStore.load(getResourceorFileAsStream(gostCertPath), GOST_STORE_PASSWORD.toCharArray());
		if (isDebugEnabled()) {
			Enumeration<String> en = gostCertStore.aliases();
			while (en.hasMoreElements()) {
				logDebug("---alias: " + en.nextElement());
			}
			logDebug("------------------------------------");
		}


Дальше я хочу получить в службе этот сертификат по имени
Код:
X509Certificate senderCertificate = keyStoreService.getCertificate(ezaemCertAlias);

Проваливамся дальше.
Код:
public X509Certificate getCertificate(String alias) throws Exception {
 return (X509Certificate) gostCertStore.getCertificate(alias);
}

Ещё дальше:
Код:
public final Certificate getCertificate(String alias) throws KeyStoreException {
 if (!initialized) {
    throw new KeyStoreException("Uninitialized keystore");
 }
 return keyStoreSpi.engineGetCertificate(alias);
}


Ну дальше абстрактый метод:
Код:
public abstract Certificate engineGetCertificate(String alias);


Если я правильно понимаю, дальше идёт реализация от JCP.
NPE У меня падает, когда я вызываю метод cert.getEncoded() на нулевом объекте, который не удалось достать из хранилища.
С предыдущей версией JCP этот код не вызывал NPE.

Возможно я видел ошибку при дебаге, когда он перечисляет сертификаты, он их берёт из указанного store D:/nbki_new, а уже метод engineGetCertificate(String alias) лезет в какое-то D:/default_Store (или как-то так). Это лишь личное предположение, да и в предыдущей версии такой ошибки не возникает (установил себе 2 JDK c 2 версиями JCP).
Offline Евгений Афанасьев  
#20 Оставлено : 23 июля 2018 г. 14:08:48(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
gostCertStore - это, как я понимаю (судя по load с параметрами), хранилище сертификатов формата CertStore? Не могли бы вы в отладке посмотреть список сертификатов в gostCertStore.spi, есть ли в нем ivanov? Если возможно, приложите хранилище сертификатов здесь или пришлите на afevma at cryptopro.ru, спасибо (с подобной проблемой не сталкивались).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
6 Страницы<1234>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.