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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Андрей Владимирович Вуколов  
#1 Оставлено : 16 ноября 2023 г. 20:45:31(UTC)
Андрей Владимирович Вуколов

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

Группы: Участники
Зарегистрирован: 15.11.2023(UTC)
Сообщений: 6
Откуда: Saint-Petersburg

Сказал(а) «Спасибо»: 1 раз
Добрый день! подскажите, что может быть сделано не так?
имеем тестовый сертификат госуслуг
сертификат алгоритма ГОСТ Р 34.11-2012 256 бит
подгрузил все свежие списки отозванных сертов из репозитория http://certenroll.test.gosuslugi.ru/cdp/
в цепочке подписания находится сам сертификат, которым подписываем и корневой сертификат УЦ
JCP 5.0.40363-A

Код:

digest OID is null
; error codes: [-2] 'Application error', 
	at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
	at JspTest.testSign(JspTest.java:119)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	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.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	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.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
Caused by: java.lang.NullPointerException: digest OID is null
	at org.bouncycastle.operator.DefaultDigestAlgorithmIdentifierFinder.find(Unknown Source)
	at org.bouncycastle.operator.DefaultDigestAlgorithmIdentifierFinder.find(Unknown Source)
	at org.bouncycastle.cms.SignerInfoGeneratorBuilder.createGenerator(Unknown Source)
	at org.bouncycastle.cms.SignerInfoGeneratorBuilder.build(Unknown Source)
	... 26 more



Код:
 Зависимости bc
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
            <version>1.60</version>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcpkix-jdk15on</artifactId>
            <version>1.60</version>
        </dependency>


Код:
 инициализация Провайдеров
        System.setProperty("file.encoding", "UTF-8");
        Security.addProvider(new JCSP());
        Security.addProvider(new JCP());
        Security.addProvider(new RevCheck());// провайдер проверки сертификатов JCPRevCheck
        System.setProperty("com.sun.security.enableAIAcaIssuers", "true");
        System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "true");


Код:
 загрузка кейстора
        log.info("Loading PFX");
        KeyStore ks = KeyStore.getInstance(JCSP.PFX_STORE_NAME, JCSP.PROVIDER_NAME);
        ks.load(new FileInputStream(ROOT_DIR + KEY_STORE_FILENAME), KEY_PASSWORD.toCharArray());
        log.info("Loading PFX completed!");



Код:
код подписания
        CAdESSignature cadesSignature= new CAdESSignature();
        List<X509Certificate> signerCertificateChain = new ArrayList<>();
        signerCertificateChain.addAll(certChain); - тут корневой серт и серт для подписания
        cadesSignature.addSigner(
                JCSP.PROVIDER_NAME, // Имя провайдера, который будет использоваться для создания подписи.
                null,// Идентификатор алгоритма хэширования, который будет использоваться для вычисления дайджеста (хэша) подписываемых данных.
                null,// Идентификатор алгоритма подписи, который будет использоваться для создания электронной подписи.
                key, // Приватный ключ подписанта.
                signerCertificateChain, // Цепочка сертификатов подписанта.
                CAdESType.CAdES_BES, // Тип CAdES подписи.
                null, // Адрес TSA службы.
                false, // Заверяющая ли подпись.
                null, // Таблица подписанных аттрибутов для добавления в подпись.
                null, // Таблица неподписанных аттрибутов для добавления в подпись.
                getCrl(), // CRL (списков отзыва сертификатов), связанных с подписью.
                true // Добавить ли цепочку подписанта в подпись.
        );

в cacerts добавил корневой сертификат для основного сертификата из кейстора (кейсторы переименовал чтоб загрузились на сайт)
skl.txt (5kb) загружен 1 раз(а).
cacerts.txt (165kb) загружен 0 раз(а). пароль 1234567890

Спасибо!

Отредактировано пользователем 17 ноября 2023 г. 10:55:30(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 16 ноября 2023 г. 22:19:56(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
Что у вас за версия JCP в формате x.y.zzzz?
Offline Андрей Владимирович Вуколов  
#3 Оставлено : 16 ноября 2023 г. 23:19:49(UTC)
Андрей Владимирович Вуколов

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

Группы: Участники
Зарегистрирован: 15.11.2023(UTC)
Сообщений: 6
Откуда: Saint-Petersburg

Сказал(а) «Спасибо»: 1 раз
Автор: Евгений Афанасьев Перейти к цитате
Здравствуйте.
Что у вас за версия JCP в формате x.y.zzzz?


Java 17
Java jcp 5.0.40363-A
Кейстор создавался путем экспорта закрытого ключа сертификата пользователя из КриптоПро CSP в PKCS12 (.PFX)
Offline Андрей Владимирович Вуколов  
#4 Оставлено : 17 ноября 2023 г. 10:20:39(UTC)
Андрей Владимирович Вуколов

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

Группы: Участники
Зарегистрирован: 15.11.2023(UTC)
Сообщений: 6
Откуда: Saint-Petersburg

Сказал(а) «Спасибо»: 1 раз
Акуализировал в основном сообщении информацию, + добавил код как загружаю кейстор.
может ли проблема заключаться в том, что я использую провайдер JCSP? но JCP не может работать с PFX

Отредактировано пользователем 17 ноября 2023 г. 10:21:10(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#5 Оставлено : 17 ноября 2023 г. 15:06:47(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 691 раз в 652 постах
Здравствуйте.
Попробуйте либо передать нужный OID алгоритма хэширования и OID алгоритма ключа вместо двух null в addSigner, либо оставить null и взять более новую сборку (до какой-то версии надо было обязательно передавать OID, а не null).
Код:

public static String keyAlgToDigestOid(String keyAlgName) {
        if (keyAlgName.equalsIgnoreCase(JCP.GOST_EL_2012_256_NAME) ||
            keyAlgName.equalsIgnoreCase(JCP.GOST_DH_2012_256_NAME) ||
            keyAlgName.equalsIgnoreCase(JCP.GOST_PARAMS_SIG_2012_256_KEY_OID) ||
            keyAlgName.equalsIgnoreCase(JCP.GOST_PARAMS_EXC_2012_256_KEY_OID)) {
            return JCP.GOST_DIGEST_2012_256_OID;
        }
        else if (keyAlgName.equalsIgnoreCase(JCP.GOST_EL_2012_512_NAME) ||
            keyAlgName.equalsIgnoreCase(JCP.GOST_DH_2012_512_NAME) ||
            keyAlgName.equalsIgnoreCase(JCP.GOST_PARAMS_SIG_2012_512_KEY_OID) ||
            keyAlgName.equalsIgnoreCase(JCP.GOST_PARAMS_EXC_2012_512_KEY_OID)) {
            return JCP.GOST_DIGEST_2012_512_OID;
        }
        return JCP.GOST_DIGEST_OID;
}
public static String keyAlgToKeyAlgorithmOid(String keyAlgName) {
        if (keyAlgName.equalsIgnoreCase(JCP.GOST_EL_2012_256_NAME) ||
           (keyAlgName.equalsIgnoreCase(JCP.GOST_DH_2012_256_NAME))) {
            return JCP.GOST_PARAMS_SIG_2012_256_KEY_OID;
        }
        if (keyAlgName.equalsIgnoreCase(JCP.GOST_EL_2012_512_NAME) ||
           (keyAlgName.equalsIgnoreCase(JCP.GOST_DH_2012_512_NAME))) {
            return JCP.GOST_PARAMS_SIG_2012_512_KEY_OID;
        }
        return JCP.GOST_EL_KEY_OID;
}
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.