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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline IlyaS42  
#1 Оставлено : 23 января 2021 г. 13:37:44(UTC)
IlyaS42

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

Группы: Участники
Зарегистрирован: 23.01.2021(UTC)
Сообщений: 2

Сказал(а) «Спасибо»: 2 раз
Здравствуйте! Вот мой код:


Код практически полностью скопирован из примера от Честного Знака. Проблема в том, что при попытке подписать данные возникает такая ошибка:

Цитата:


Error building certification path for CN= (REDACTED)

: ru.CryptoPro.reprov.certpath
.JCPCertPathBuilderException: unable to find valid certification path to request
ed target; error codes: [33] 'PKIX failure: invalid parameters of certificate',

at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
at Server.QR.CryptoService.sign(CryptoService.java:225)
at Server.QR.CryptoService.run(CryptoService.java:69)
at java.lang.Thread.run(Unknown Source)
Caused by: Error building certification path for CN= (REDACTED)
: ru.CryptoPro.repr
ov.certpath.JCPCertPathBuilderException: unable to find valid certification path
to requested target; error codes: [33] 'PKIX failure: invalid parameters of cer
tificate',
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unkno
wn Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unkno
wn Source)
... 6 more


Теоретически, я включил
Цитата:

static {
Security.addProvider(new JCSP());
System.setProperty("com.sun.security.enableCRLDP", "true"); // для проверки по CRL DP
System.setProperty("com.ibm.security.enableCRLDP", "true"); // для проверки по CRL DP
System.setProperty("com.sun.security.enableAIAcaIssuers", "true"); // для загрузки сертификатов по AIA из сети
System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "true"); // для загрузки сертификатов по AIA из сети
}


Получается, нельзя надеяться на подгрузку сертификатов из интернета? Я добавил и корневой, и промежуточный сертификат в cacerts и куда - то в jcsp.
Offline Санчир Момолдаев  
#2 Оставлено : 25 января 2021 г. 7:31:26(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 226 раз в 213 постах
Добрый день!
может быть много причин. создайте обращение на портале технической поддержки и приложите туда сертификат.
дополнительно укажите ссылку на данную тему

соберите дополнительно логи согласно статье
уровень логгирования ALL
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
IlyaS42 оставлено 28.01.2021(UTC)
Offline Евгений Афанасьев  
#3 Оставлено : 25 января 2021 г. 23:16:04(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
Здравствуйте.
Автор: IlyaS42 Перейти к цитате

Теоретически, я включил
Цитата:

static {
Security.addProvider(new JCSP());
System.setProperty("com.sun.security.enableCRLDP", "true"); // для проверки по CRL DP
System.setProperty("com.ibm.security.enableCRLDP", "true"); // для проверки по CRL DP
System.setProperty("com.sun.security.enableAIAcaIssuers", "true"); // для загрузки сертификатов по AIA из сети
System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "true"); // для загрузки сертификатов по AIA из сети
}

Получается, нельзя надеяться на подгрузку сертификатов из интернета?

+ к логам:
причины ошибки при построении цепочки могут быть разные, логи и приложенная цепочка сертификатов могут помочь.
В вашем списке провайдеров только один:
Код:

Security.addProvider(new JCSP());

Еще нужен RevCheck + можно JCP:
Код:

Security.addProvider(new JCSP());     // 1
Security.addProvider(new JCP());      // 2 
Security.addProvider(new RevCheck()); // 3

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

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
IlyaS42 оставлено 28.01.2021(UTC)
Offline what_is_it@inbox.ru  
#4 Оставлено : 5 июля 2021 г. 14:00:52(UTC)
what_is_it@inbox.ru

Статус: Активный участник

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 11 раз в 9 постах
Добрый день!
JCP 2.0.41473

Не удается проверить конкретные подписи: test EhP Imjatest20210701 CRYPTO-PRO Test Center.pdf.sig (35kb) загружен 3 раз(а). и test EhP Imjatest Testovyjj UC OOO.pdf.sig (36kb) загружен 3 раз(а).
Сертификаты подписантов: cert Imjatest20210701 CRYPTO-PRO Test Center.p7b (1kb) загружен 3 раз(а). cert Imjatest Testovyjj UC OOO.p7b (2kb) загружен 3 раз(а).
Полный лог: log.txt (60kb) загружен 2 раз(а).

Корневые/промежуточные сертификаты, загруженные в cacerts: certs.zip (3kb) загружен 6 раз(а).

Код:


Security.addProvider(JCP())
Security.addProvider(RevCheck())
System.setProperty("com.sun.security.enableCRLDP", "true")
System.setProperty("com.ibm.security.enableCRLDP", "true")
System.setProperty("com.sun.security.enableAIAcaIssuers", "true")
System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "true")

Files.newInputStream(signPath, StandardOpenOption.READ).use { sis ->
                val fileIs = if (signModel.detached == false)
                    null
                else
                    Files.newInputStream(filePath, StandardOpenOption.READ)

                val cAdESSignature = fileIs?.use { fis ->
                    CAdESSignature(
                            if (signModel.signEncoding == "DER")
                                sis
                            else Base64.getMimeDecoder().wrap(sis),
                            fis,
                            null)
                } ?: CAdESSignature(
                        if (signModel.signEncoding == "DER")
                            sis
                        else Base64.getMimeDecoder().wrap(sis), null, null)

                val signers =
                        cAdESSignature.cAdESSignerInfos.map { signer ->
                            val subject = CAdESUtils.parseToSubject(signer)
                            loadCertificatesToKeyStore(signer, subject, config.pathToKeyStore!!, config.keyStorePassword!!)

                            SignerInfo(subject = subject,
                                    issuer = parseToIssuer(signer),
                                    signType = defineSignatureTypeByCode(signer.signatureType),
                                    validFrom = signer.signerCertificate.notBefore.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(),
                                    validTo = signer.signerCertificate.notAfter.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(),
                                    signingTime = getSigningTime(signer, subject),
                                    cAdESTTimestamps = getCAdESTTimestamps(signer)?.toList(),
                                    cAdESСTimestamps = getCAdESCTimestamps(signer)?.toList())
                        }
                try {
                    cAdESSignature.verify(setOf<X509Certificate>(), setOf<X509Certificate>())
                    SignInfo(signers = signers, valid = true, error = null)
                } catch (e1: CAdESException) {
                    ...получаем ошибку
                }
            }


Получаем ошибку
Цитата:

ru.CryptoPro.CAdES.exception.CAdESException: Error building certification path for the target, sn: 7c00029c20c8edb9bbb7f6052f000100029c20, subject: O=Орг Тест для подписи, CN=Имятест, EMAILADDRESS=mr.antonivanov1989@mail.ru, issuer: CN="Тестовый УЦ ООО \"КРИПТО-ПРО\"", O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=г. Москва, C=RU, STREET=ул. Сущёвский вал д. 18, OID.1.2.643.3.131.1.1=#120C303031323334353637383930, OID.1.2.643.100.1=#120D31323334353637383930313233 : ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
at ru.CryptoPro.CAdES.CAdESSignerPKCS7Impl.verify(Unknown Source)
at ru.CryptoPro.CAdES.CAdESSignerBESImpl.verify(Unknown Source)
at ru.CryptoPro.CAdES.cl_1.verify(Unknown Source)
at ru.ursip.webservice.filestore.service.impl.SignServiceImpl$verifyCAdES$2.invokeSuspend(SignServiceImpl.kt:295)


Своими силами разобраться не удалось.
Подписи созданы с помощью CryptoPro Tools.
Подскажите, пожалуйста, почему в JCP не проверяются эти подписи.
Offline IlyaS42  
#5 Оставлено : 6 июля 2021 г. 4:58:56(UTC)
IlyaS42

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

Группы: Участники
Зарегистрирован: 23.01.2021(UTC)
Сообщений: 2

Сказал(а) «Спасибо»: 2 раз
Автор: what_is_it@inbox.ru Перейти к цитате
Добрый день!
JCP 2.0.41473

Не удается проверить конкретные подписи: test EhP Imjatest20210701 CRYPTO-PRO Test Center.pdf.sig (35kb) загружен 3 раз(а). и test EhP Imjatest Testovyjj UC OOO.pdf.sig (36kb) загружен 3 раз(а).
Сертификаты подписантов: cert Imjatest20210701 CRYPTO-PRO Test Center.p7b (1kb) загружен 3 раз(а). cert Imjatest Testovyjj UC OOO.p7b (2kb) загружен 3 раз(а).
Полный лог: log.txt (60kb) загружен 2 раз(а).

Корневые/промежуточные сертификаты, загруженные в cacerts: certs.zip (3kb) загружен 6 раз(а).

Код:


Security.addProvider(JCP())
Security.addProvider(RevCheck())
System.setProperty("com.sun.security.enableCRLDP", "true")
System.setProperty("com.ibm.security.enableCRLDP", "true")
System.setProperty("com.sun.security.enableAIAcaIssuers", "true")
System.setProperty("ru.CryptoPro.reprov.enableAIAcaIssuers", "true")

Files.newInputStream(signPath, StandardOpenOption.READ).use { sis ->
                val fileIs = if (signModel.detached == false)
                    null
                else
                    Files.newInputStream(filePath, StandardOpenOption.READ)

                val cAdESSignature = fileIs?.use { fis ->
                    CAdESSignature(
                            if (signModel.signEncoding == "DER")
                                sis
                            else Base64.getMimeDecoder().wrap(sis),
                            fis,
                            null)
                } ?: CAdESSignature(
                        if (signModel.signEncoding == "DER")
                            sis
                        else Base64.getMimeDecoder().wrap(sis), null, null)

                val signers =
                        cAdESSignature.cAdESSignerInfos.map { signer ->
                            val subject = CAdESUtils.parseToSubject(signer)
                            loadCertificatesToKeyStore(signer, subject, config.pathToKeyStore!!, config.keyStorePassword!!)

                            SignerInfo(subject = subject,
                                    issuer = parseToIssuer(signer),
                                    signType = defineSignatureTypeByCode(signer.signatureType),
                                    validFrom = signer.signerCertificate.notBefore.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(),
                                    validTo = signer.signerCertificate.notAfter.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(),
                                    signingTime = getSigningTime(signer, subject),
                                    cAdESTTimestamps = getCAdESTTimestamps(signer)?.toList(),
                                    cAdESСTimestamps = getCAdESCTimestamps(signer)?.toList())
                        }
                try {
                    cAdESSignature.verify(setOf<X509Certificate>(), setOf<X509Certificate>())
                    SignInfo(signers = signers, valid = true, error = null)
                } catch (e1: CAdESException) {
                    ...получаем ошибку
                }
            }


Получаем ошибку
Цитата:

ru.CryptoPro.CAdES.exception.CAdESException: Error building certification path for the target, sn: 7c00029c20c8edb9bbb7f6052f000100029c20, subject: O=Орг Тест для подписи, CN=Имятест, EMAILADDRESS=mr.antonivanov1989@mail.ru, issuer: CN="Тестовый УЦ ООО \"КРИПТО-ПРО\"", O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=г. Москва, C=RU, STREET=ул. Сущёвский вал д. 18, OID.1.2.643.3.131.1.1=#120C303031323334353637383930, OID.1.2.643.100.1=#120D31323334353637383930313233 : ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
at ru.CryptoPro.CAdES.CAdESSignerPKCS7Impl.verify(Unknown Source)
at ru.CryptoPro.CAdES.CAdESSignerBESImpl.verify(Unknown Source)
at ru.CryptoPro.CAdES.cl_1.verify(Unknown Source)
at ru.ursip.webservice.filestore.service.impl.SignServiceImpl$verifyCAdES$2.invokeSuspend(SignServiceImpl.kt:295)


Своими силами разобраться не удалось.
Подписи созданы с помощью CryptoPro Tools.
Подскажите, пожалуйста, почему в JCP не проверяются эти подписи.



Меня выручила консольная утилита. csptest, кажется? Если вам можно обойтись ей - попробуйте! Самый простой способ.
Offline what_is_it@inbox.ru  
#6 Оставлено : 6 июля 2021 г. 9:27:02(UTC)
what_is_it@inbox.ru

Статус: Активный участник

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 11 раз в 9 постах
Цитата:
Меня выручила консольная утилита. csptest, кажется? Если вам можно обойтись ей - попробуйте! Самый простой способ.

Проверка подписей другими средствами не решает проблему.
Мы используем JCP и вопрос заключается в том, как при помощи JCP проверить данные подписи, почему они не проверяются
Offline Евгений Афанасьев  
#7 Оставлено : 6 июля 2021 г. 11:24:23(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 690 раз в 651 постах
Внимательно пока не вчитывался, но в ошибке написано: не построена цепочка для сертификата с issuer: CN="Тестовый УЦ ООО \"КРИПТО-ПРО\"", O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=г. Москва, C=RU, STREET=ул. Сущёвский вал д. 18, OID.1.2.643.3.131.1.1=#120C303031323334353637383930, OID.1.2.643.100.1=#120D31323334353637383930313233.
В файле certs.zip, сертификаты из которого, как сказано, установлены в cacerts, нет корневого CN="Тестовый УЦ ООО "КРИПТО-ПРО"". Надо поставить и учитывать, что таких корневых сертификатов вроде больше одного. Попробуйте. Если не поможет, будем уже детально смотреть.

Отредактировано пользователем 6 июля 2021 г. 11:25:38(UTC)  | Причина: Не указана

Offline miser  
#8 Оставлено : 8 июля 2021 г. 15:25:32(UTC)
miser

Статус: Активный участник

Группы: Участники
Зарегистрирован: 14.03.2011(UTC)
Сообщений: 152
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 1 раз
Поблагодарили: 7 раз в 5 постах
Есть 3 полезных функции проверки корневого сертификата.
1) AdESUtility.isSelfSigned(certificate)
2) AdESUtility.isSelfSignedForCaCerts(certificate)
3) AdESUtility.isSelfSignedSignature(certificate)
Первая, это выполнение второй и третей, объединенные союзом И.
Сам столкнулся с подобной ошибкой тестового корневого сертификата другого УЦ. Сертификат отмечен как CA, но подписан не своим ключом. В результате, цепочку средствами КриптоПро JCP не построена. В частности, это не работает в
Код:
List<X509Certificate> chain
CAdESSignature cadesSignature = new CAdESSignature(detached);
cadesSignature.addSigner(..., chain, ...);

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