Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Тестовый контейнер можно выпустить тут - https://cryptopro.ru/certsrv/Попробую проверить с помощью csptest (команда csptest -sfse), cryptcp нечто подобное поддерживает, примеры из samples.jar (CMS_samples - типа PKCS7EnvEphTransport как с JCP, так и JCSP). |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 03.07.2018(UTC) Сообщений: 17  Откуда: Москва
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Для ГОСТ 2012 должен использоваться соответствующий алгоритм в KeyPairGenerator, например, JCP.GOST_EPH_DH_2012_256_NAME. Для algid аналогично может быть использован, например, JCP.GOST_PARAMS_EXC_2012_256_KEY_OID. Дело, скорее всего, не в алгоритме подписи сертификата, а открытом ключе (ГОСТ 2012). У вас стала появляться ошибка на вашей стороне, в коде? Сначала я бы предложил обновить JCP до последней версии, т.к. были исправления. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Попробуйте заменить CryptParamsSpec.OID_Crypt_VerbaO на CryptParamsSpec.OID_Gost28147_89_Rosstandart_TC26_Z_ParamSet и обновить JCP. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Добрый день. Не могли бы вы привести стек ошибки? Последняя версия jcp - 2.0.39738 |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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).
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005  Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
gostCertStore - это, как я понимаю (судя по load с параметрами), хранилище сертификатов формата CertStore? Не могли бы вы в отладке посмотреть список сертификатов в gostCertStore.spi, есть ли в нем ivanov? Если возможно, приложите хранилище сертификатов здесь или пришлите на afevma at cryptopro.ru, спасибо (с подобной проблемой не сталкивались). |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close