Статус: Новичок
Группы: Участники
Зарегистрирован: 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) загружен 7 раз(а).Код:
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, кажется? Если вам можно обойтись ей - попробуйте! Самый простой способ.
|