Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.10.2018(UTC) Сообщений: 36 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Сказал(а) «Спасибо»: 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) Заранее благодарен за помощь.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Здравствуйте. Срок действия сертификата не истек? Корневой сертификат добавили в cacerts? |
|
![thanks](/forum2/Themes/soclean/heart_small.png) 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.10.2018(UTC) Сообщений: 36 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Сказал(а) «Спасибо»: 4 раз
|
С ошибкой я справился. Проблема в моем случае заключалась в том, что нужно было добавить все сертификаты в цепочке добавить в <JRE>/lib/security/cacerts.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Нужно добавить в cacerts не все, а только корневой (ые). Остальные подаются в addSigner или verify. |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.10.2018(UTC) Сообщений: 36 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Сказал(а) «Спасибо»: 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 я удалял только свой личный сертификат сертификат
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.10.2018(UTC) Сообщений: 36 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Сказал(а) «Спасибо»: 4 раз
|
Полностью удалил и заново поставил java. После этого gradle песпокойненько скачал все записимости. После этого поставил JCP + пакет Rutoken для JCP. Добавил два сертификата в /lib/security/cacerts. После этого попытался заново обновить зависимости с помощью gradle - ошибка полностью повторилась. Т.е. получается, что проблема возникает либо после добавления мной сертификатов в cacerts, либо после установки JCP. Сертификаты добавлял утилитой keytool.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,005 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Откуда: Крипто-Про Сказал(а) «Спасибо»: 21 раз Поблагодарили: 715 раз в 675 постах
|
Скорее всего, вы установили 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](/forum2/Themes/soclean/heart_small.png) 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 23.10.2018(UTC) Сообщений: 36 ![Российская Федерация Российская Федерация](/forum2/Content/images/flags/RU.png) Сказал(а) «Спасибо»: 4 раз
|
Да, дело было именно в этом. Вернул настройки в первоначальный вид и все заработало. Спасибо!
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close