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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline maximkosheev  
#1 Оставлено : 5 ноября 2018 г. 16:12:34(UTC)
maximkosheev

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

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

Сказал(а) «Спасибо»: 4 раз
Добрый день!
Пишу программу на Java и пока что разбираюсь с работой CAdES подписью на примерах, находящихся в пакете sample-sources/CAdES.
Выбрал пример SignExample.java, только переделал его его под себя:
задал провайдера: JCP
тип контейнера: RutokenStore
алиас: тот, который находится на моем ключевом носителе;
задал пароль: по-умолчанию для Rutoken

Пример корректно выбирает сертификаты, ключи из хранилища и вроде как все хорошо...

Однако при создании экземпляра подписи CAdESSignature возникает вот такое исключение:

ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at ru.CryptoPro.reprov.CPCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl$1CertPathBuilderWrapper.build(Unknown Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
at ru.CryptoPro.AdES.certificate.CertificateChainBuilderImpl.build(Unknown Source)
at ru.CryptoPro.CAdES.g.addSigner(Unknown Source)
at CAdES.SignExample.createMixedSignatureWith2Signers(SignExample.java:82)
at CAdES.SignExample.signExample(SignExample.java:190)
at CAdES.SignExample.main(SignExample.java:225)
Заранее благодарен за помощь.
Offline Евгений Афанасьев  
#2 Оставлено : 5 ноября 2018 г. 18:22:34(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 688 раз в 649 постах
Здравствуйте.
Срок действия сертификата не истек? Корневой сертификат добавили в cacerts?
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
maximkosheev оставлено 05.11.2018(UTC)
Offline maximkosheev  
#3 Оставлено : 5 ноября 2018 г. 18:33:41(UTC)
maximkosheev

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

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

Сказал(а) «Спасибо»: 4 раз
С ошибкой я справился. Проблема в моем случае заключалась в том, что нужно было добавить все сертификаты в цепочке добавить в <JRE>/lib/security/cacerts.
Offline Евгений Афанасьев  
#4 Оставлено : 6 ноября 2018 г. 7:03:39(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 688 раз в 649 постах
Нужно добавить в cacerts не все, а только корневой (ые). Остальные подаются в addSigner или verify.
Offline maximkosheev  
#5 Оставлено : 8 ноября 2018 г. 22:17:57(UTC)
maximkosheev

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

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

Сказал(а) «Спасибо»: 4 раз
Еще проблема возникла. Скорее всего она мелочная, поэтому не стал создавать новую тему.
После всех этих манипуляций ошибка ушла и подпись нормально создается Но!
Я разрабатываю проект в IntelliJ Idea 2018, в качестве сборщика проекта используется gradle.
Так вот... Сейчас gradle не может скачать зависимости по той же самой причине:

org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':compileClasspath'.
<здесь пропущен очень большой стек вызово>
Caused by: org.gradle.internal.resource.transport.http.HttpRequestException: Could not GET 'https://repo.maven.apache.org/maven2/org/springframework/spring-core/5.1.2.RELEASE/spring-core-5.1.2.RELEASE.pom'.
at org.gradle.internal.resource.transport.http.HttpClientHelper.performRequest(HttpClientHelper.java:96)
at org.gradle.internal.resource.transport.http.HttpClientHelper.performRawGet(HttpClientHelper.java:80)
at org.gradle.internal.resource.transport.http.HttpClientHelper.performGet(HttpClientHelper.java:84)
at org.gradle.internal.resource.transport.http.HttpResourceAccessor.openResource(HttpResourceAccessor.java:43)
at org.gradle.internal.resource.transport.http.HttpResourceAccessor.openResource(HttpResourceAccessor.java:29)
at org.gradle.internal.resource.transfer.DefaultExternalResourceConnector.openResource(DefaultExternalResourceConnector.java:56)
at org.gradle.internal.resource.transfer.ProgressLoggingExternalResourceAccessor.openResource(ProgressLoggingExternalResourceAccessor.java:37)
at org.gradle.internal.resource.transfer.AccessorBackedExternalResource.withContentIfPresent(AccessorBackedExternalResource.java:130)
at org.gradle.internal.resource.BuildOperationFiringExternalResourceDecorator$11.call(BuildOperationFiringExternalResourceDecorator.java:237)
at org.gradle.internal.resource.BuildOperationFiringExternalResourceDecorator$11.call(BuildOperationFiringExternalResourceDecorator.java:229)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:314)
at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:304)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:100)
at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
at org.gradle.internal.resource.BuildOperationFiringExternalResourceDecorator.withContentIfPresent(BuildOperationFiringExternalResourceDecorator.java:229)
at org.gradle.internal.resource.transfer.DefaultCacheAwareExternalResourceAccessor.copyToCache(DefaultCacheAwareExternalResourceAccessor.java:199)
... 88 more
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: [PKIX] a failure during build of the certificate chain
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:396)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.gradle.internal.resource.transport.http.HttpClientHelper.performHttpRequest(HttpClientHelper.java:148)
at org.gradle.internal.resource.transport.http.HttpClientHelper.performHttpRequest(HttpClientHelper.java:126)
at org.gradle.internal.resource.transport.http.HttpClientHelper.executeGetOrHead(HttpClientHelper.java:103)
at org.gradle.internal.resource.transport.http.HttpClientHelper.performRequest(HttpClientHelper.java:94)
... 104 more
Caused by: java.security.cert.CertificateException: [PKIX] a failure during build of the certificate chain
at ru.CryptoPro.ssl.w.a(Unknown Source)
at ru.CryptoPro.ssl.w.a(Unknown Source)
at ru.CryptoPro.ssl.g.checkServerTrusted(Unknown Source)
... 119 more
Caused by: ru.CryptoPro.reprov.certpath.JCPCertPathBuilderException: unable to find valid certification path to requested target
at ru.CryptoPro.reprov.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at ru.CryptoPro.reprov.CPCertPathBuilder.engineBuild(Unknown Source)
... 122 more

Подскажите как это починить?
В файле cacerts я удалял только свой личный сертификат сертификат
Offline maximkosheev  
#6 Оставлено : 8 ноября 2018 г. 23:57:59(UTC)
maximkosheev

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

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

Сказал(а) «Спасибо»: 4 раз
Полностью удалил и заново поставил java. После этого gradle песпокойненько скачал все записимости.
После этого поставил JCP + пакет Rutoken для JCP. Добавил два сертификата в /lib/security/cacerts. После этого попытался заново обновить зависимости с помощью gradle - ошибка полностью повторилась.
Т.е. получается, что проблема возникает либо после добавления мной сертификатов в cacerts, либо после установки JCP.
Сертификаты добавлял утилитой keytool.
Offline Евгений Афанасьев  
#7 Оставлено : 9 ноября 2018 г. 9:10:08(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 688 раз в 649 постах
Скорее всего, вы установили cpSSL в ту JDK/JRE, которую использует maven/gradle, а cpSSL меняет некоторые настройки в java.security. Попробуйте удалить его, если не нужен, или вернуть настройки, приведенные ниже, в исходное состояние, но при этом, если используете cpSSL, задайте их программно.
Стало после установки cpSSL:
Код:

ssl.KeyManagerFactory.algorithm=GostX509
ssl.TrustManagerFactory.algorithm=GostX509
ssl.SocketFactory.provider=ru.CryptoPro.ssl.SSLSocketFactoryImpl
ssl.ServerSocketFactory.provider=ru.CryptoPro.ssl.SSLServerSocketFactoryImpl

Исходный вид (до установки cpSSL), к которому нужно вернуться:
Код:

ssl.KeyManagerFactory.algorithm=SunX509
ssl.TrustManagerFactory.algorithm=PKIX
#ssl.SocketFactory.provider=ru.CryptoPro.ssl.SSLSocketFactoryImpl - убираем из java.security, если cpSSL их добавил
#ssl.ServerSocketFactory.provider=ru.CryptoPro.ssl.SSLServerSocketFactoryImpl - убираем из java.security, если cpSSL их добавил

Задать программно (для cpSSL):
Код:

Security.setProperty("ssl.KeyManagerFactory.algorithm", "GostX509");
Security.setProperty("ssl.TrustManagerFactory.algorithm", "GostX509");
Security.setProperty("ssl.SocketFactory.provider", "ru.CryptoPro.ssl.SSLSocketFactoryImpl");
Security.setProperty("ssl.ServerSocketFactory.provider", "ru.CryptoPro.ssl.SSLServerSocketFactoryImpl");

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

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
maximkosheev оставлено 09.11.2018(UTC)
Offline maximkosheev  
#8 Оставлено : 9 ноября 2018 г. 9:24:33(UTC)
maximkosheev

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

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

Сказал(а) «Спасибо»: 4 раз
Да, дело было именно в этом. Вернул настройки в первоначальный вид и все заработало.
Спасибо!
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.