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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline jet_ultra  
#1 Оставлено : 9 апреля 2021 г. 16:55:51(UTC)
jet_ultra

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

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

На основе примеров SDK и изучения форумов получился код на Kotlin для создания отсоединенной подписи для Android устройства
Код:

            val ks = KeyStore.getInstance(JCSP.HD_STORE_NAME, JCSP.PROVIDER_NAME);
            System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "true"); 
            System.setProperty( "com.sun.security.enableCRLDP", "true" );
            System.setProperty( "com.ibm.security.enableCRLDP", "true" );
            ks.load(null, null);

            var certs: Array<Certificate>? = ks.getCertificateChain(alias);
            
            var signature = CAdESSignature(false);
            val passwordParameter = JCPProtectionParameter(password.toCharArray())
            val privateKey = ks.getEntry(alias, passwordParameter) as JCPPrivateKeyEntry
            
            val cert = getCertificate(alias, ks);                        
            Single.fromCallable {    
                signature.addSigner(JCP.PROVIDER_NAME,
                    null, null,
                    privateKey.privateKey,
                    certs!!.toList(),
                    CAdESType.CAdES_BES,
                    null,
                    false);
                }.subscribeOn(Schedulers.io())
                .subscribe({s -> s},{throwable -> Log.e("Error", "Throwable " + throwable)});
        
            
            val out = ByteArrayOutputStream();
            signature.open(out);
            signature.update(bytes);
            signature.close();
            val signedCode = out.toByteArray();
            return signedCode;


Возникает ошибка:

Код:

W/JCP     ( 3184): ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build :: unable to find valid certification path to requested target
W/JCP     ( 3184): ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
W/JCP     ( 3184): 	at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.engineBuild(Unknown Source:190)
W/JCP     ( 3184): 	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl$1CertPathBuilderWrapper.build(Unknown Source:35)
W/JCP     ( 3184): 	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source:311)
W/JCP     ( 3184): 	at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source:98)
W/JCP     ( 3184): 	at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source:266)
W/JCP     ( 3184): 	at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source:22)
W/JCP     ( 3184): 	at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source:19)
W/JCP     ( 3184): 	at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source:15)
W/JCP     ( 3184): 	at ru.croc.mobile.crpt.business.MainActivity$CryptoProNativeApiImpl$sign$1.call(MainActivity.kt:226)
W/JCP     ( 3184): 	at ru.croc.mobile.crpt.business.MainActivity$CryptoProNativeApiImpl$sign$1.call(MainActivity.kt:60)
W/JCP     ( 3184): 	at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:44)
W/JCP     ( 3184): 	at io.reactivex.Single.subscribe(Single.java:3603)
W/JCP     ( 3184): 	at io.reactivex.internal.operators.single.SingleSubscribeOn$SubscribeOnObserver.run(SingleSubscribeOn.java:89)
W/JCP     ( 3184): 	at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:578)
W/JCP     ( 3184): 	at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
W/JCP     ( 3184): 	at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
W/JCP     ( 3184): 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
W/JCP     ( 3184): 	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
W/JCP     ( 3184): 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
W/JCP     ( 3184): 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
W/JCP     ( 3184): 	at java.lang.Thread.run(Thread.java:919)
E/@@@@    ( 3184): Throwable Error occurred during building the certification path for the target:
E/@@@@    ( 3184): 	serial: 2ff0d6900f3acdd8e43589b2ca5c280eb
E/@@@@    ( 3184): 	subject: <subject>
E/@@@@    ( 3184): 	issuer: CN="Тестовый подчиненный УЦ ООО \"КРИПТО-ПРО\" ГОСТ 2012 (УЦ 2.0)", O="ООО \"КРИПТО-ПРО\"", STREET=ул. Сущёвский вал д. 18, L=Москва, ST=77 Москва, C=RU, OID.1.2.643.3.131.1.1=#120C303037373137313037393931, OID.1.2.643.100.1=#120D31303337373030303835343434, EMAILADDRESS=info@cryptopro.ru
E/@@@@    ( 3184): 	not before: Mon Mar 22 09:12:30 GMT+03:00 2021
E/@@@@    ( 3184): 	not after: Tue Jun 22 09:22:30 GMT+03:00 2021
E/@@@@    ( 3184): 	signature provider: JCP
E/@@@@    ( 3184): 	validation date: null
E/@@@@    ( 3184): 	native implementation: false
E/@@@@    ( 3184): : unable to find valid certification path to requested target; error codes: [33] 'PKIX failure: invalid parameters of certificate',




В хранилище сертификатов на устройстве в область "user" добавил корневой и промежуточный сертификаты.

В xml\network_security_config.xml

добавил:

Код:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>    
    <debug-overrides> 
        <trust-anchors> 
            <!-- Trust user added CAs while debuggable only -->
            <certificates src="user" /> 
        </trust-anchors>    
    </debug-overrides>  
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">testca2012.cryptopro.ru</domain>
    </domain-config>
</network-security-config>


Что я делаю не так?

Отредактировано пользователем 9 апреля 2021 г. 17:00:26(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 10 апреля 2021 г. 11:06:04(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Здравствуйте.
Включите логирование, как тут https://docs.cryptopro.r...d/additional_information и приложите лог.
Offline jet_ultra  
#3 Оставлено : 10 апреля 2021 г. 18:30:58(UTC)
jet_ultra

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

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

Добрый день! Включил логирование с уровнем DEBUG. Увидел исключение

Caused by: java.security.NoSuchProviderException: no such provider: JCP

и нашел у себя ошибку. При добавлении подписанта использовал JCP провайдер вместо JCSP. Большое спасибо за помощь, подпись формируется.
Offline Евгений Афанасьев  
#4 Оставлено : 10 апреля 2021 г. 18:35:30(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 685 раз в 646 постах
Да, тут
Цитата:

signature.addSigner(JCP.PROVIDER_NAME,

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