Статус: Новичок
Группы: Участники
Зарегистрирован: 31.10.2023(UTC) Сообщений: 4
|
Приветствую, благодарю за помощь, отложил задау потом нашел на форуме про добавление сертификатов в траст и локально заработало, и работает у коллеги) Но во докере на тестовом стенде ругается ошибкой: Код:Root certificate: serial 317be3301c1ac17a948cf46a8c4f46f4d, subject CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru, issuer CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru, not before Sun Jan 31 21:30:28 MSK 2021, not after Thu Jan 31 21:30:28 MSK 2036 is untrusted; error codes: [32] 'Root certificate is in the certificate chain but not in cacerts',
at ru.CryptoPro.CAdES.cl_1.addSigner(Unknown Source)
at com.webbankir.crypto.main.verticles.VerticleSign$signPKCS7$2.invoke(VerticleSign.kt:253)
at com.webbankir.crypto.main.verticles.VerticleSign$signPKCS7$2.invoke(VerticleSign.kt:209)
at io.vertx.kotlin.coroutines.VertxCoroutineKt$awaitBlocking$2.invoke$lambda$0(VertxCoroutine.kt:113)
at io.vertx.core.impl.ContextBase.lambda$null$0(ContextBase.java:137)
at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:264)
at io.vertx.core.impl.ContextBase.lambda$executeBlocking$1(ContextBase.java:135)
at io.vertx.core.impl.TaskQueue.run(TaskQueue.java:76)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: Root certificate: serial 317be3301c1ac17a948cf46a8c4f46f4d, subject CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru, issuer CN=УЦ КРИПТО-ПРО (ГОСТ 2012), O="ООО \"КРИПТО-ПРО\"", L=Москва, ST=Москва, C=RU, EMAILADDRESS=cpca@cryptopro.ru, not before Sun Jan 31 21:30:28 MSK 2021, not after Thu Jan 31 21:30:28 MSK 2036 is untrusted; error codes: [32] 'Root certificate is in the certificate chain but not in cacerts',
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.validateIfRootCertificateInTrustStoreAndAddToChain(Unknown Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
У меня есть .pfx и .cer. cer для подписи использую а вот с .pfx брал цепочку сертификатов чтоб положить в cacerts ТАк как ошибка была про то что корневой сертификат не добавлен в cacerts Я добавл все сертификаты которые есть в .pfx в доверенные keytool-ом Код:
fun loadToTrustAllCertsFromPfx() {
logger.info("Start extract certs from pfx")
val cerFilePath = getResourcePath("/testbk2023.pfx")
val keystorePassword = "111".toCharArray() // replace with actual password
val fis = FileInputStream(cerFilePath)
val keyStore = KeyStore.getInstance("PKCS12")
keyStore.load(fis, keystorePassword)
fis.close()
val aliases = keyStore.aliases()
val certNamesForTrusted = mutableListOf<String>()
while (aliases.hasMoreElements()) {
val alias = aliases.nextElement()
// If the alias refers to a key pair, print the certificate
if (keyStore.isKeyEntry(alias)) {
// Get the certificate chain
val chain = keyStore.getCertificateChain(alias)
chain.forEachIndexed { index, certificate ->
val certName = "$alias-$index.crt"
// Write each certificate to a separate file
FileOutputStream("$alias-$index.crt").use { fos ->
fos.write(certificate.encoded)
}
certNamesForTrusted.add(certName)
}
}
}
var file = File("jssecacerts")
if (!file.isFile()) {
val SEP = File.separatorChar
val dir = File(System.getProperty("java.home") + SEP + "lib" + SEP + "security")
file = File(dir, "jssecacerts")
if (!file.isFile()) {
file = File(dir, "cacerts")
}
}
val keystorePath = file.absolutePath
for (certName in certNamesForTrusted) {
val cerFilePath = File(certName).absolutePath
val keytoolProcess = keytoolImport(keystorePath, cerFilePath, certName)
keytoolProcess.waitFor()
}
logger.info("Success put nbki root into trusted")
}
private fun keytoolImport(keystorePath: String?, cerFilePath: String?, alias: String): Process {
val keytoolProcess = ProcessBuilder(
"keytool", "-import", "-trustcacerts", "-alias", alias,
"-keystore", keystorePath,
"-file", cerFilePath,
"-storepass", "changeit"
).apply {
inheritIO()
}.start()
return keytoolProcess
}
+ добавил параметров (тоже по форуму видел рекомендации) 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"); И в логах нет сообщений об ошибках - как буд-то все ок добавилось но всеравно при подписании ошибка выше. Не пойму куда копать,
|