Автор: Санчир Момолдаев 
Добрый день.
должно быть 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
Буду благодарен за любые подсказки.