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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline gluberg  
#1 Оставлено : 3 марта 2023 г. 13:39:37(UTC)
gluberg

Статус: Участник

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

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 7 раз в 2 постах
Всем доброго дня, не работал раньше в качестве разработчика с криптографией. Работал в качестве сисадмина.

Исходники: Java Spring Boot(2.6.4) приложение, которое должно быть REST API клиентом системы МДЛП "Честныйзнак".
Запросы отправляю при помощи библиотеки openFeign (3.1.5). На всех возможных серверах проверял, работает как часы, отправляет запросы и получает ответы. Тут все в порядке.

При обращении к МДЛП естественно ругается на SSL и падает в ошибку. Поискав понял, что только тут есть информация. Скачал и установил и даже внедрил CryptoPro JCP. Это подтверждается логированием ru.CryptoPro.ssl.SSLLogger.
Естественно все корневые сертификаты и прочее установлены. Так как изначально пытался реализовать это на React.JS, но уперся в CORS, а поддержка не смогла мне помочь. Потому решил перенести это на Java.
Итак, все работает, отправляется и принимается, но не с честным знаком.

Сначала ругался, что trustStore у меня пустой. В общем я две недели читал этот форум и даже нашел подобную тему на том же языке, но увы там небыло информации и проект немного более широкого функционала, нежели мне надо. Тема на этом форуме
Вчера начал уже мучать ботов умных, движение пошло, но все равно не было чего-то, что надо. То он провайдера не видит, то тип хранилища не тот и т.д.
Поиск тут я тоже использовал и читал два дня, документацию JCP тоже читал, но как видите результата не получилось.

На сегодня имею вышеизложенное приложение с подключенной библиотекой JCP от крипто про. Решил спросить у людей, так как вы умнее ботов, я уверен в этом. Подскажите пожалуйста, как настроить JCP, чтобы это все корректно работало? Те кто знают МДЛП, помнят про эндпоинт без авторизации через GET запрос, который возвращает размер документа. Так вот я решил потестировать на нем, но даже этот простейший ответ не могу получить, так как упираюсь именно в шифрование.

Буду очень признателен за помощь, если вдруг что не так, не пинайте сильно.

Отредактировано пользователем 3 марта 2023 г. 13:47:51(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 3 марта 2023 г. 18:47:10(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Здравствуйте.
Приведите конкретные ошибки, логи, стектрейсы.
А лучше обратиться в портал техподдержки, там помогут оперативнее.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
gluberg оставлено 14.03.2023(UTC)
Offline gluberg  
#3 Оставлено : 6 марта 2023 г. 10:15:24(UTC)
gluberg

Статус: Участник

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

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 7 раз в 2 постах
Логи. В общем то на этот момент как только делаю запрос, консоль выдает такое. Пробовал создавать keyStore, указывать на него через настройки приложения и пробовал указывать на него внутри main класса.
В этом случае он ругался на неправильный формат keyStore или отсутствие криптопровайдера. Хотя повторюсь, все есть.
На этом форуме я в большей степени ищу ответ на вопрос: Как настроить JCP. Ведь из коробки он не работает с API МДЛП, так как в данный момент например ругается на keyStore и соответственно отсутствующие корневые сертификаты.

2023-03-03 11:32:52.193 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : keyStore is :
2023-03-03 11:32:52.194 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : keyStore type is :
2023-03-03 11:32:52.194 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : keyStore provider is :
2023-03-03 11:32:52.232 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : init keystore
2023-03-03 11:32:52.236 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.JCP.tools.JCPLogger : Loading JCP 2.0.41789
2023-03-03 11:32:52.304 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.JCP.tools.JCPLogger : JCP has been loaded.
2023-03-03 11:32:52.932 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : init keymanager of type GostX509
2023-03-03 11:32:52.938 WARN 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : %% No appropriate keys for handshake
PATH: C:\Users\USERNAME\Local Settings\Application Data\Crypto Pro
2023-03-03 11:32:52.940 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : trustStore is : No File Available, using empty keystore.
2023-03-03 11:32:52.940 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : trustStore type is : CertStore
2023-03-03 11:32:52.940 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : trustStore provider is :
2023-03-03 11:32:52.941 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : init truststore
2023-03-03 11:32:52.943 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : SSLContextImpl init.
2023-03-03 11:32:52.948 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : trigger seeding of SecureRandom
2023-03-03 11:32:52.952 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : done seeding SecureRandom
2023-03-03 11:32:52.952 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : SSLContextImpl initialized.
2023-03-03 11:32:52.953 INFO 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : DefaultSSLContext initialized.
2023-03-03 11:32:53.045 WARN 31992 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : http-nio-89-exec-1, handling exception: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
2023-03-03 11:32:53.076 ERROR 31992 --- [p-nio-89-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is feign.RetryableException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty executing GET https://api.mdlp.crpt.ru/api/v1/documents/get_size] with root cause

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:200) ~[na:1.8.0_311]
at java.security.cert.PKIXParameters.<init>(PKIXParameters.java:120) ~[na:1.8.0_311]
at java.security.cert.PKIXBuilderParameters.<init>(PKIXBuilderParameters.java:104) ~[na:1.8.0_311]
at ru.CryptoPro.ssl.pc_4.cl_2.<init>(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.pc_4.cl_4.a(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.cl_121.a(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.cl_121.a(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.cl_121.a(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.cl_121.checkServerTrusted(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.cl_16.a(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.cl_16.a(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.cl_59.s(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.cl_59.a(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.SSLSocketImpl.a(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.SSLSocketImpl.n(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.SSLSocketImpl.b(Unknown Source) ~[cpSSL.jar:41789]
at ru.CryptoPro.ssl.SSLSocketImpl.startHandshake(Unknown Source) ~[cpSSL.jar:41789]
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:587) ~[na:1.8.0_311]
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:197) ~[na:1.8.0_311]
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1584) ~[na:1.8.0_311]
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1512) ~[na:1.8.0_311]
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) ~[na:1.8.0_311]
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:352) ~[na:1.8.0_311]
at feign.Client$Default.convertResponse(Client.java:110) ~[feign-core-11.10.jar:na]
at feign.Client$Default.execute(Client.java:106) ~[feign-core-11.10.jar:na]
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:121) ~[feign-core-11.10.jar:na]
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:91) ~[feign-core-11.10.jar:na]
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100) ~[feign-core-11.10.jar:na]
at com.sun.proxy.$Proxy115.getMe(Unknown Source) ~[na:na]
at ru.brightway.api.Controllers.MainController.getZ(MainController.java:58) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_311]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_311]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_311]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_311]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.16.jar:5.3.16]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.16.jar:5.3.16]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.16.jar:5.3.16]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.16.jar:5.3.16]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.16.jar:5.3.16]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.16.jar:5.3.16]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.16.jar:5.3.16]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.16.jar:5.3.16]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.16.jar:5.3.16]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.16.jar:5.3.16]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.58.jar:4.0.FR]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.16.jar:5.3.16]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.58.jar:4.0.FR]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.58.jar:9.0.58]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.58.jar:9.0.58]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.16.jar:5.3.16]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.16.jar:5.3.16]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.58.jar:9.0.58]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.16.jar:5.3.16]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.16.jar:5.3.16]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.58.jar:9.0.58]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.16.jar:5.3.16]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.16.jar:5.3.16]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:359) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:889) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1735) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.58.jar:9.0.58]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.58.jar:9.0.58]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_311]
Offline Евгений Афанасьев  
#4 Оставлено : 6 марта 2023 г. 12:18:04(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Ошибка по смыслу простая - она сообщает, что загруженное хранилище корневых сертификатов пусто.

Вы писали:
Автор: gluberg Перейти к цитате
Естественно все корневые сертификаты и прочее установлены.

Корневые установлены именно в то хранилище корневых сертификатов, что вы используете для TrustManagerFactory, который передаете в SSLContext? Именно корневые! (самоподписанные), а не сертификат сервера.
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
gluberg оставлено 09.03.2023(UTC)
Offline gluberg  
#5 Оставлено : 9 марта 2023 г. 14:47:37(UTC)
gluberg

Статус: Участник

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

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 7 раз в 2 постах
То есть получается, что скачанные мною сертификаты минцифры и добавленные в созданный мною keystore при помощи keytool не видны для JCP.
Выходит я как-то не так создал keystore и у меня получился банально самоподписанный сертификат, который разумеется не подходит.
Но в системе windows есть же хранилище сертификатов, в котором установлены все корневые и промежуточные сертификаты в соответствии с инструкцией.
Есть ли способ в таком случае JCP указать путь именно к этому хранилищу windows, или как то через крипто-про или через мастер экспорта сертификатов экспортировать их в отдельное хранилище и указать путь до него в настройках уже моего приложения.
Я понимаю, что уперся в банальность, которая другим может показаться такой же простой, как сложить самолетик, но мои гуглежные способности были истощены d'oh!
Offline gluberg  
#6 Оставлено : 10 марта 2023 г. 16:00:42(UTC)
gluberg

Статус: Участник

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

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 7 раз в 2 постах
Я вчера очень долго и много разных вариантов попробовал с truststore, выяснил, что он должен быть в формате .JKS.
Но увы, приложение его не видит.
Прописывал в настройках, запихивал во все возможные места, в стом числе
Java\jdk1.8.0_311\lib\security\cacerts
\Local Settings\Application Data\Crypto Pro
Импортировал в truststore необходимые сертификаты - это Минцифры и Минкомсвязь, но всегда получаю один и тот же лог
ru.CryptoPro.ssl.SSLLogger : %% No appropriate keys for handshake
ru.CryptoPro.ssl.SSLLogger : trustStore is : No File Available, using empty keystore.

И одно и то же исключение
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

Я понимаю, что он хочет получить алгоритм шифрования, но не понимаю как ему это указать. Если кто-то думает, что я сижу и жду тут ответа - увы, Вы не правы. Гуглеж продолжается. При этом у меня есть надежда, что кто-то все же сможет мне помочь на этом форуме.

Мой keystore доступен и пароль в настройках введен. Его содержимое ниже

Your keystore contains 2 entries

Alias name: znak1
Creation date: 09.03.2023
Entry type: trustedCertEntry

Owner: CN="АО \"ПФ \"СКБ КОНТУР\"", O="АО \"ПФ \"СКБ КОНТУР\"", OU=Удостоверяющий центр, STREET="улица Народной воли, строение 19А", L=Екатеринбург, ST=66 Свердловская область, C=RU, OID.1.2.643.3.131.1.1=#120C3030363636333030333132
37, OID.1.2.643.100.1=#120D31303236363035363036363230, EMAILADDRESS=ca@skbkontur.ru
Issuer: CN=Минкомсвязь России, OID.1.2.643.3.131.1.1=#120C303037373130343734333735, OID.1.2.643.100.1=#120D31303437373032303236373031, O=Минкомсвязь России, STREET="улица Тверская, дом 7", L=г. Москва, ST=77 Москва, C=RU, EMAILADDRE
SS=dit@minsvyaz.ru
Serial number: 1f8e8510000000005c8
Valid from: Tue Aug 17 14:27:33 MSK 2021 until: Sun Aug 17 14:27:33 MSK 2036
Certificate fingerprints:
SHA1: 16:15:9C:98:4E:65:48:BD:CD:0A:2C:51:8E:49:3B:81:94:BB:0E:33
SHA256: B6:9B:96:74:CD:F4:E1:D3:DB:B3:3D:CF:5C:A9:6F:92:4A:64:F8:BA:FF:6D:AD:ED:C1:73:88:B0:A1:1A:77:17
Signature algorithm name: 1.2.643.7.1.1.3.2
Subject Public Key Algorithm: GOST3410_2012_256 key of unknown size
Version: 3

Extensions:

#1: ObjectId: 1.2.643.100.111 Criticality=false
0000: 0C 49 22 D0 9A D1 80 D0 B8 D0 BF D1 82 D0 BE D0 .I".............
0010: 9F D1 80 D0 BE 20 43 53 50 22 20 28 D0 B2 D0 B5 ..... CSP" (....
0020: D1 80 D1 81 D0 B8 D1 8F 20 34 2E 30 29 20 28 D0 ........ 4.0) (.
0030: B8 D1 81 D0 BF D0 BE D0 BB D0 BD D0 B5 D0 BD D0 ................
0040: B8 D0 B5 20 32 2D 42 61 73 65 29 ... 2-Base)


#2: ObjectId: 1.2.643.100.112 Criticality=false
0000: 30 81 E8 0C 34 D0 9F D0 90 D0 9A D0 9C 20 C2 AB 0...4........ ..
0010: D0 9A D1 80 D0 B8 D0 BF D1 82 D0 BE D0 9F D1 80 ................
0020: D0 BE 20 48 53 4D C2 BB 20 D0 B2 D0 B5 D1 80 D1 .. HSM.. .......
0030: 81 D0 B8 D0 B8 20 32 2E 30 0C 43 D0 9F D0 90 D0 ..... 2.0.C.....
0040: 9A 20 C2 AB D0 93 D0 BE D0 BB D0 BE D0 B2 D0 BD . ..............
0050: D0 BE D0 B9 20 D1 83 D0 B4 D0 BE D1 81 D1 82 D0 .... ...........
0060: BE D0 B2 D0 B5 D1 80 D1 8F D1 8E D1 89 D0 B8 D0 ................
0070: B9 20 D1 86 D0 B5 D0 BD D1 82 D1 80 C2 BB 0C 35 . .............5
0080: D0 97 D0 B0 D0 BA D0 BB D1 8E D1 87 D0 B5 D0 BD ................
0090: D0 B8 D0 B5 20 E2 84 96 20 31 34 39 2F 33 2F 32 .... ... 149/3/2
00A0: 2F 32 2F 32 33 20 D0 BE D1 82 20 30 32 2E 30 33 /2/23 .... 02.03
00B0: 2E 32 30 31 38 0C 34 D0 97 D0 B0 D0 BA D0 BB D1 .2018.4.........
00C0: 8E D1 87 D0 B5 D0 BD D0 B8 D0 B5 20 E2 84 96 20 ........... ...
00D0: 31 34 39 2F 37 2F 36 2F 31 30 35 20 D0 BE D1 82 149/7/6/105 ....
00E0: 20 32 37 2E 30 36 2E 32 30 31 38 27.06.2018


#3: ObjectId: 1.3.6.1.4.1.311.20.2 Criticality=false
0000: 0C 05 53 75 62 43 41 ..SubCA


#4: ObjectId: 1.3.6.1.4.1.311.21.1 Criticality=false
0000: 02 03 03 00 03 .....


#5: ObjectId: 1.3.6.1.5.5.7.1.1 Criticality=false
AuthorityInfoAccess [
[
accessMethod: caIssuers
accessLocation: URIName: http://reestr-pki.ru/cdp/guc2021.crt
]
]

#6: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 19 77 8F BB 82 E6 6F C8 5F 93 F0 15 1D 93 22 A1 .w....o._.....".
0010: D6 AD 0C 26 ...&
]
[CN=Минкомсвязь России, OID.1.2.643.3.131.1.1=#120C303037373130343734333735, OID.1.2.643.100.1=#120D31303437373032303236373031, O=Минкомсвязь России, STREET="улица Тверская, дом 7", L=г. Москва, ST=77 Москва, C=RU, EMAILADDRESS=dit@
minsvyaz.ru]
SerialNumber: [ eaca32ce f5f979d6 8d3c4e4f 2cc687a4]
]

#7: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:0
]

#8: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
[DistributionPoint:
[URIName: http://reestr-pki.ru/cdp/guc2021.crl]
, DistributionPoint:
[URIName: http://company.rt.ru/cdp/guc2021.crl]
, DistributionPoint:
[URIName: http://rostelecom.ru/cdp/guc2021.crl]
]]

#9: ObjectId: 2.5.29.32 Criticality=false
CertificatePolicies [
[CertificatePolicyId: [1.2.643.100.113.1]
[] ]
[CertificatePolicyId: [1.2.643.100.113.2]
[] ]
[CertificatePolicyId: [2.5.29.32.0]
[] ]
]

#10: ObjectId: 2.5.29.15 Criticality=false
KeyUsage [
DigitalSignature
Key_CertSign
Crl_Sign
]

#11: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: AC 38 C0 F2 FF 28 C5 A4 4B 6A 6F 51 CB 5C 6E 1F .8...(..KjoQ.\n.
0010: 84 F3 D2 1B ....
]
]



*******************************************
*******************************************


Alias name: znak
Creation date: 09.03.2023
Entry type: trustedCertEntry

Owner: CN=Минцифры России, OID.1.2.643.100.4=#120A37373130343734333735, OID.1.2.643.100.1=#120D31303437373032303236373031, O=Минцифры России, STREET="Пресненская набережная, дом 10, строение 2", L=г. Москва, ST=77 Москва, C=RU, EMAI
LADDRESS=dit@digital.gov.ru
Issuer: CN=Минцифры России, OID.1.2.643.100.4=#120A37373130343734333735, OID.1.2.643.100.1=#120D31303437373032303236373031, O=Минцифры России, STREET="Пресненская набережная, дом 10, строение 2", L=г. Москва, ST=77 Москва, C=RU, EMA
ILADDRESS=dit@digital.gov.ru
Serial number: 951fa3477c61043aadfa858627823442
Valid from: Sat Jan 08 16:32:39 MSK 2022 until: Sun Jan 08 16:32:39 MSK 2040
Certificate fingerprints:
SHA1: 2F:0C:B0:9B:E3:55:0E:F1:7E:C4:F2:9C:90:AB:D1:8B:FC:AA:D6:3A
SHA256: 4B:B3:7C:C7:C0:FF:4B:F2:AA:89:3E:95:07:6E:BB:35:65:C6:92:37:EE:1B:61:63:5B:EE:E4:C1:96:64:95:C7
Signature algorithm name: 1.2.643.7.1.1.3.2
Subject Public Key Algorithm: GOST3410_2012_256 key of unknown size
Version: 3

Extensions:

#1: ObjectId: 1.2.643.100.111 Criticality=false
0000: 0C 34 D0 9F D0 90 D0 9A D0 9C 20 C2 AB D0 9A D1 .4........ .....
0010: 80 D0 B8 D0 BF D1 82 D0 BE D0 9F D1 80 D0 BE 20 ...............
0020: 48 53 4D C2 BB 20 D0 B2 D0 B5 D1 80 D1 81 D0 B8 HSM.. ..........
0030: D0 B8 20 32 2E 30 .. 2.0


#2: ObjectId: 1.2.643.100.112 Criticality=false
0000: 30 81 E8 0C 34 D0 9F D0 90 D0 9A D0 9C 20 C2 AB 0...4........ ..
0010: D0 9A D1 80 D0 B8 D0 BF D1 82 D0 BE D0 9F D1 80 ................
0020: D0 BE 20 48 53 4D C2 BB 20 D0 B2 D0 B5 D1 80 D1 .. HSM.. .......
0030: 81 D0 B8 D0 B8 20 32 2E 30 0C 43 D0 9F D0 90 D0 ..... 2.0.C.....
0040: 9A 20 C2 AB D0 93 D0 BE D0 BB D0 BE D0 B2 D0 BD . ..............
0050: D0 BE D0 B9 20 D1 83 D0 B4 D0 BE D1 81 D1 82 D0 .... ...........
0060: BE D0 B2 D0 B5 D1 80 D1 8F D1 8E D1 89 D0 B8 D0 ................
0070: B9 20 D1 86 D0 B5 D0 BD D1 82 D1 80 C2 BB 0C 35 . .............5
0080: D0 97 D0 B0 D0 BA D0 BB D1 8E D1 87 D0 B5 D0 BD ................
0090: D0 B8 D0 B5 20 E2 84 96 20 31 34 39 2F 33 2F 32 .... ... 149/3/2
00A0: 2F 32 2F 32 33 20 D0 BE D1 82 20 30 32 2E 30 33 /2/23 .... 02.03
00B0: 2E 32 30 31 38 0C 34 D0 97 D0 B0 D0 BA D0 BB D1 .2018.4.........
00C0: 8E D1 87 D0 B5 D0 BD D0 B8 D0 B5 20 E2 84 96 20 ........... ...
00D0: 31 34 39 2F 37 2F 36 2D 34 34 39 20 D0 BE D1 82 149/7/6-449 ....
00E0: 20 33 30 2E 31 32 2E 32 30 32 31 30.12.2021


#3: ObjectId: 1.2.643.100.114 Criticality=false
0000: 02 01 00 ...


#4: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:2147483647
]

#5: ObjectId: 2.5.29.32 Criticality=false
CertificatePolicies [
[CertificatePolicyId: [1.2.643.100.113.1]
[] ]
[CertificatePolicyId: [1.2.643.100.113.2]
[] ]
[CertificatePolicyId: [1.2.643.100.113.3]
[] ]
[CertificatePolicyId: [1.2.643.100.113.4]
[] ]
[CertificatePolicyId: [1.2.643.100.113.5]
[] ]
[CertificatePolicyId: [2.5.29.32.0]
[] ]
]

#6: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
Key_CertSign
Crl_Sign
]

#7: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: C9 13 58 B1 4C A7 62 3A 7E D2 3F 3C A6 E7 14 7C ..X.L.b:..?<....
0010: 9D 70 A3 86 .p..
]
]



*******************************************
*******************************************

Отредактировано пользователем 10 марта 2023 г. 16:06:06(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#7 Оставлено : 10 марта 2023 г. 17:04:05(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Автор: gluberg Перейти к цитате
в системе windows есть же хранилище сертификатов, в котором установлены все корневые и промежуточные сертификаты в соответствии с инструкцией.
Есть ли способ в таком случае JCP указать путь именно к этому хранилищу windows, или как то через крипто-про или через мастер экспорта сертификатов экспортировать их в отдельное хранилище и указать путь до него в настройках уже моего приложения.

Нет, java провайдер не имеет доступа к хранилищам системы. Нужно использовать java хранилище - форматов "CertStore" (от JCP), "JKS" (от Sun), "PKCS12" (от Sun), "BKS" (от BC) и т.п.
Автор: gluberg Перейти к цитате
он должен быть в формате .JKS

Нет, может быть любой из упомянутых выше типов хранилищ корневых сертификатов.

Создавать SSLContext нужно так, как описано в "3.2 Использование КриптоПро JavaTLS через внешний интерфейс JSSE" руководства программиста JTLS, цитата:
Код:

KeyStore trustStore = KeyStore.getInstance(JCP.CERT_STORE_NAME);
trustStore.load(new FileInputStream(“path_to_trust_store”), "trust_store_password".toCharArray()); // хранилище корневых сертификатов
// Если контекст для сервера или для клиента с аутентификацией
if (isServer || clientNeedsAuth) {
    KeyManagerFactory kmf = KeyManagerFactory.getInstance("GostX509");
    KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
    keyStore.load(null, null);
    kmf.init(keyStore, “key_store_password”.toCharArray()); // Пароль к контейнеру
} // сервера или клиента
TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509");
tmf.init(trustStore);
SSLContext sslCtx = SSLContext.getInstance("GostTLS"); // Защищенный контекст
sslCtx.init(kmf != null ? kmf.getKeyManagers() : null, tmf.getTrustManagers(), null);

path_to_trust_store - это ваше хранилище корневых сертификатов (полный путь к нему) формата JCP.CERT_STORE_NAME ("CertStore"). Его можно создать в панели JCP или программно. Также можно использовать "JKS" (создав его в keytool).
Далее проинициализированный sslCtx или sslSocketFactory из него обычно передается в http клиент - это зависит от самого http клиента.
Если в хранилище будет хотя бы один самоподписанный корневой сертификат, то ошибки "InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty" не будет.
Также trust store можно создать программно, добавляя в него сертификаты прямо в коде с помощью setCertificateEntry.
Если ваш http клиент какой-то другой (не apache http client, okhttp client или HttpsUrlConnection и т.п.), то могут быть сложности.

Отредактировано пользователем 10 марта 2023 г. 17:04:37(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
gluberg оставлено 14.03.2023(UTC)
Offline gluberg  
#8 Оставлено : 14 марта 2023 г. 9:23:12(UTC)
gluberg

Статус: Участник

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

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 7 раз в 2 постах
Добрпый день, товарищи. Прочитал вчера Ваш ответ и не мог не радоваться. У меня появились новые ошибки и я их решал последовательно одну за другой, но вот не смог сдержаться и поблагодарить.
В общем первое - это мне пришлось отказаться от openFeign и использую Apache Http Client.
Сейчас конечно тоже возникает ошибка, но буду с ней бороться. Просто хотел поблагодарить.
Естественно когда все заработает как надо я обязательно отпишусь.
Вот пока мой лог

2023-03-14 09:10:03.373 INFO 23052 --- [ main] ru.CryptoPro.JCP.tools.JCPLogger : Loading JCP 2.0.41789
2023-03-14 09:10:03.374 INFO 23052 --- [ main] ru.CryptoPro.JCP.tools.JCPLogger : JCP has been loaded.
2023-03-14 09:10:03.852 INFO 23052 --- [ main] ru.CryptoPro.ssl.SSLLogger : %% adding as private keys %%
2023-03-14 09:10:04.041 INFO 23052 --- [ main] ru.CryptoPro.ssl.SSLLogger : SSLContextImpl init.
2023-03-14 09:10:04.052 INFO 23052 --- [ main] ru.CryptoPro.ssl.SSLLogger : trigger seeding of SecureRandom
2023-03-14 09:10:04.052 INFO 23052 --- [ main] ru.CryptoPro.ssl.SSLLogger : done seeding SecureRandom
2023-03-14 09:10:04.053 INFO 23052 --- [ main] ru.CryptoPro.ssl.SSLLogger : SSLContextImpl initialized.

2023-03-14 09:10:39.605 WARN 23052 --- [p-nio-89-exec-1] ru.CryptoPro.ssl.SSLLogger : http-nio-89-exec-1, handling exception: javax.net.ssl.SSLHandshakeException: ru.CryptoPro.ssl.pc_4.cl_5: PKIX path validation failed: java.security.GeneralSecurityException: Online certificate verification is enabled but com.sun.security.enableCRLDP = false (Sun), com.ibm.security.enableCRLDP = false (Ibm), and offline certificate verification is disabled, and ManagerFactoryParameters are null.

javax.net.ssl.SSLHandshakeException: ru.CryptoPro.ssl.pc_4.cl_5: PKIX path validation failed: java.security.GeneralSecurityException: Online certificate verification is enabled but com.sun.security.enableCRLDP = false (Sun), com.ibm.security.enableCRLDP = false (Ibm), and offline certificate verification is disabled, and ManagerFactoryParameters are null.
Offline Евгений Афанасьев  
#9 Оставлено : 14 марта 2023 г. 9:46:45(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 20 раз
Поблагодарили: 704 раз в 665 постах
Ошибка сообщает, что не удаётся проверить сертификат другой стороны (сервера) на отзыв, так как не включено скачивание crl из сети. Такая проверка на отзыв включена по умолчанию. Чтобы было обращение в сеть за crl в ходе проверки, нужно запускать java процесс с параметром

-Dcom.sun.security.enableCRLDP=true

или задать его в коде так:

System.setProperty("com.sun.security.enableCRLDP", "true");
thanks 1 пользователь поблагодарил Евгений Афанасьев за этот пост.
gluberg оставлено 14.03.2023(UTC)
Offline gluberg  
#10 Оставлено : 14 марта 2023 г. 12:05:34(UTC)
gluberg

Статус: Участник

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

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 7 раз в 2 постах
Да, спасибо. Я только что перед прочтением этого поста прочитал это, нашел и исправил. И в панели настройки нашел и как в программе изменить. Теперь мне наконец-то сервер присылает код ошибки 401))
А это значит, что я наконец таки общаюсь с сервером и он мне отвечает. Спасибо вам огромное за помощь.
Резюмируя, в чем была моя беда:
Не был настроен SSLContext и использовался для запросов openFeign. Последний конечно прост и хорош, но не для нашего шифрования.
В итоге использовал Apache Http Client, настроил SSLContext и начал общаться с сервером.
Думаю отпишусь, когда получу наконец адекватный ответ от сервера с 200 кодом, но сам факт ответа с 401 кодом говорит о том, что Вы мне очень помогли настроить шифрование.
А я пойду снова погружусь в документацию МДЛП, возможно я не тот эндпоинт использовал)) Еще раз огромное спасибо. Поклон в ноги.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.