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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Сергей Егоров  
#1 Оставлено : 24 сентября 2024 г. 8:11:01(UTC)
Сергей Егоров

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.09.2024(UTC)
Сообщений: 7
Российская Федерация
Откуда: Тюмень

Сказал(а) «Спасибо»: 4 раз
Добрый день,
Есть микросервис взаимодействующий с ЕИС Госзакупки с использованием GostTLS. Все работает отлично.

Сейчас появилось требование заказчика, загружать некие дополнительные данные из S3 совместимого хранилища timeweb.cloud используя HTTP. Естественно timeweb.cloud не использует ГОСТ шифрование и при попытке выполнить GET запрос HttpClient-ом получаем javax.net.ssl.SSLException: Received fatal alert: protocol_version

Существует ли где-нибудь описание, как правильно настроить SSLContext чтобы он умел и ГОСТ шифрование и без него?

Спасибо.
Offline Санчир Момолдаев  
#2 Оставлено : 24 сентября 2024 г. 11:25:51(UTC)
Санчир Момолдаев

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

Группы: Администраторы, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,234
Российская Федерация

Сказал(а) «Спасибо»: 105 раз
Поблагодарили: 296 раз в 276 постах
Добрый день.

должно быть 2 SSLContext, один гостовый, другой стоковый.
затем в клиента уже set-ать нужный
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
Сергей Егоров оставлено 24.09.2024(UTC)
Offline Сергей Егоров  
#3 Оставлено : 21 октября 2025 г. 11:29:27(UTC)
Сергей Егоров

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.09.2024(UTC)
Сообщений: 7
Российская Федерация
Откуда: Тюмень

Сказал(а) «Спасибо»: 4 раз
Автор: Санчир Момолдаев Перейти к цитате
Добрый день.

должно быть 2 SSLContext, один гостовый, другой стоковый.
затем в клиента уже set-ать нужный


Добрый день,
А у вас случаем нет примеров кода, как такое можно реализовать?

Тема вновь стала для меня актуальной, и мне никак не удается сверстать правильный контекст, который позволял бы взаимодействовать с использованием TLS, но без ГОСТ алгоритма.

Я инициализирую контекст:


System.setProperty("com.sun.security.enableCRLDP", "true");
System.setProperty("com.sun.security.enableAIAcaIssuers", "true");

KeyStore key_store = KeyStore.getInstance("HDImageStore", "JCP");

key_store.load(null, null);

String algorithm = KeyManagerFactory.getDefaultAlgorithm();

KeyManagerFactory k_factory = KeyManagerFactory.getInstance(algorithm);

k_factory.init(key_store, password.toCharArray());

KeyStore trust_store = KeyStore.getInstance("JKS");

InputStream stream = new FileInputStream("/etc/ssl/certs/java/cacerts");

trust_store.load(stream, "changeit");

String algorithm = TrustManagerFactory.getDefaultAlgorithm();

TrustManagerFactory t_factory = TrustManagerFactory.getInstance(algorithm);

t_factory.init(trust_store);

SSLContext ssl_context = SSLContext.getInstance("TLSv1.2");

ssl_context.init(k_factory.getKeyManagers(), t_factory.getTrustManagers(), null);

SSLConnectionSocketFactory socket_factory = new SSLConnectionSocketFactory(ssl_context);

CloseableHttpClient http_client = HttpClients.custom().setSSLSocketFactory(socket_factory).build();


Затем любой HTTPS запрос выбрасывает у меня исключение вида:

FINEST: 1001 сохранение отчетов о загрузке из ЕИС 268f2861-2075-422f-ac74-cfc44928be48; Ошибка! javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1903)
at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1886)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1402)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
at okhttp3.internal.connection.ConnectPlan.connectTls(ConnectPlan.kt:355)
at okhttp3.internal.connection.ConnectPlan.connectTlsEtc(ConnectPlan.kt:210)
at okhttp3.internal.connection.FastFallbackExchangeFinder.find(FastFallbackExchangeFinder.kt:78)
at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:280)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:126)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:101)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:126)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:85)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:126)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:74)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:126)
at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:208)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:530)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Suppressed: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
... 23 more
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at ru.CryptoPro.ssl.pc_4.cl_2.<init>(Unknown Source)
at ru.CryptoPro.ssl.pc_4.cl_4.a(Unknown Source)
at ru.CryptoPro.ssl.cl_121.a(Unknown Source)
at ru.CryptoPro.ssl.cl_121.a(Unknown Source)
at ru.CryptoPro.ssl.cl_121.a(Unknown Source)
at ru.CryptoPro.ssl.cl_121.checkServerTrusted(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1621)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:223)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1037)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:965)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1064)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
... 18 more
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:200)
at java.security.cert.PKIXParameters.<init>(PKIXParameters.java:120)
at java.security.cert.PKIXBuilderParameters.<init>(PKIXBuilderParameters.java:104)
... 31 more
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at ru.CryptoPro.ssl.pc_4.cl_2.<init>(Unknown Source)
at ru.CryptoPro.ssl.pc_4.cl_4.a(Unknown Source)
at ru.CryptoPro.ssl.cl_121.a(Unknown Source)
at ru.CryptoPro.ssl.cl_121.a(Unknown Source)
at ru.CryptoPro.ssl.cl_121.a(Unknown Source)
at ru.CryptoPro.ssl.cl_121.checkServerTrusted(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1621)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:223)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1037)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:965)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1064)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
... 18 more
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:200)
at java.security.cert.PKIXParameters.<init>(PKIXParameters.java:120)
at java.security.cert.PKIXBuilderParameters.<init>(PKIXBuilderParameters.java:104)
... 31 more


Буду благодарен за любые подсказки.
Offline Сергей Егоров  
#4 Оставлено : 21 октября 2025 г. 13:22:02(UTC)
Сергей Егоров

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.09.2024(UTC)
Сообщений: 7
Российская Федерация
Откуда: Тюмень

Сказал(а) «Спасибо»: 4 раз
В предыдущем сообщении скопировал неправильную ошибку из журнала сервиса.

Вот правильная ошибка:

FINEST: 1001 сохранение отчетов о загрузке из ЕИС c3d8a53c-4600-4253-b28c-394fe78055d4; Ошибка! javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Invalid public key algorithm RSA in the certificate:
sn 5509722b93158d201533dfa1
issuer: CN=GlobalSign GCC R3 DV TLS CA 2020, O=GlobalSign nv-sa, C=BE
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1946)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:316)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:310)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1639)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:223)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1037)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:965)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1064)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
at okhttp3.internal.connection.ConnectPlan.connectTls(ConnectPlan.kt:355)
at okhttp3.internal.connection.ConnectPlan.connectTlsEtc(ConnectPlan.kt:210)
at okhttp3.internal.connection.FastFallbackExchangeFinder.find(FastFallbackExchangeFinder.kt:78)
at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:280)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:126)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:101)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:126)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:85)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:126)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:74)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:126)
at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:208)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:530)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Suppressed: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Invalid public key algorithm RSA in the certificate:
sn 5509722b93158d201533dfa1
issuer: CN=GlobalSign GCC R3 DV TLS CA 2020, O=GlobalSign nv-sa, C=BE
... 29 more
Caused by: java.security.cert.CertificateException: Invalid public key algorithm RSA in the certificate:
sn 5509722b93158d201533dfa1
issuer: CN=GlobalSign GCC R3 DV TLS CA 2020, O=GlobalSign nv-sa, C=BE
at ru.CryptoPro.ssl.util.SecureChecker.checkPublicKeys(Unknown Source)
at ru.CryptoPro.ssl.pc_4.cl_4.b(Unknown Source)
at ru.CryptoPro.ssl.cl_121.a(Unknown Source)
at ru.CryptoPro.ssl.cl_121.a(Unknown Source)
at ru.CryptoPro.ssl.cl_121.checkServerTrusted(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1621)
... 24 more
Caused by: java.security.cert.CertificateException: Invalid public key algorithm RSA in the certificate:
sn 5509722b93158d201533dfa1
issuer: CN=GlobalSign GCC R3 DV TLS CA 2020, O=GlobalSign nv-sa, C=BE
at ru.CryptoPro.ssl.util.SecureChecker.checkPublicKeys(Unknown Source)
at ru.CryptoPro.ssl.pc_4.cl_4.b(Unknown Source)
at ru.CryptoPro.ssl.cl_121.a(Unknown Source)
at ru.CryptoPro.ssl.cl_121.a(Unknown Source)
at ru.CryptoPro.ssl.cl_121.checkServerTrusted(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1621)
... 24 more
Offline Сергей Егоров  
#5 Оставлено : 21 октября 2025 г. 13:27:58(UTC)
Сергей Егоров

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.09.2024(UTC)
Сообщений: 7
Российская Федерация
Откуда: Тюмень

Сказал(а) «Спасибо»: 4 раз
Отладочный журнал операции s3-upload.log (83kb) загружен 2 раз(а).
Offline Санчир Момолдаев  
#6 Оставлено : 21 октября 2025 г. 13:49:02(UTC)
Санчир Момолдаев

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

Группы: Администраторы, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,234
Российская Федерация

Сказал(а) «Спасибо»: 105 раз
Поблагодарили: 296 раз в 276 постах
cpSSL не предназначен для работы с зарубежными алгоритмами.

по поводу trust anchors - посмотрите что с cacerts все в порядке и он через keytool -list открывается. эта ошибка говорит о том что в trustmanager передали пустой список корневых сертификатов которым нужно доверять.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
Сергей Егоров оставлено 21.10.2025(UTC)
Offline Сергей Егоров  
#7 Оставлено : 21 октября 2025 г. 14:46:00(UTC)
Сергей Егоров

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.09.2024(UTC)
Сообщений: 7
Российская Федерация
Откуда: Тюмень

Сказал(а) «Спасибо»: 4 раз
Автор: Санчир Момолдаев Перейти к цитате
cpSSL не предназначен для работы с зарубежными алгоритмами.

по поводу trust anchors - посмотрите что с cacerts все в порядке и он через keytool -list открывается. эта ошибка говорит о том что в trustmanager передали пустой список корневых сертификатов которым нужно доверять.


Да я же понимаю что cpSSL не подходит для не ГОСТ шифрования. Я в первом сообщении и спрашивал существует ли возможность внутри одного приложения настроить два SSL контекста для разных HTTP клиентов, один из которых будет использовать ГОСТ шифрование, а второй вообще не будет обращаться к CryptoPro в операциях сетевого обмена?
Offline Санчир Момолдаев  
#8 Оставлено : 21 октября 2025 г. 14:52:18(UTC)
Санчир Момолдаев

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

Группы: Администраторы, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,234
Российская Федерация

Сказал(а) «Спасибо»: 105 раз
Поблагодарили: 296 раз в 276 постах
ну ответ не изменится. делаете два инстанса CloseableHttpClient. в одном сетаете socket factory, в другом нет
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
Сергей Егоров оставлено 21.10.2025(UTC)
Offline Сергей Егоров  
#9 Оставлено : 21 октября 2025 г. 15:16:54(UTC)
Сергей Егоров

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.09.2024(UTC)
Сообщений: 7
Российская Федерация
Откуда: Тюмень

Сказал(а) «Спасибо»: 4 раз
Автор: Санчир Момолдаев Перейти к цитате
ну ответ не изменится. делаете два инстанса CloseableHttpClient. в одном сетаете socket factory, в другом нет


Не работает так. При использовании экземпляра ClosableHttpClient, инициализированном без указания socker factory, перехватываем Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

Если инициализировать клиента HttpClients.createDefault(), получим вышеозначенное исключение.

Если инициализировать клиента HttpClients.createSystem(), получим Received fatal alert: protocol_version

P.S. Версии (JDK1.8.0_202 + JCP-2.0.41789)

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

Offline Сергей Егоров  
#10 Оставлено : 22 октября 2025 г. 7:17:16(UTC)
Сергей Егоров

Статус: Новичок

Группы: Участники
Зарегистрирован: 24.09.2024(UTC)
Сообщений: 7
Российская Федерация
Откуда: Тюмень

Сказал(а) «Спасибо»: 4 раз
Автор: Санчир Момолдаев Перейти к цитате
ну ответ не изменится. делаете два инстанса CloseableHttpClient. в одном сетаете socket factory, в другом нет


Перечитал руководство программиста JavaTLS. Появилось предположение что вы пишете про случай, когда используется Java-машина версий от 10 и выше. В этом случае функционал CryptoPro доступен сразу после включения модуля в classpath и указания его в java.security.

У меня же версия 1.8 для которой предварительно выполняется установка CryptoPro. Возможно проблема в этом?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (3)
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.