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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline RKM  
#1 Оставлено : 22 марта 2016 г. 17:56:22(UTC)
RKM

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

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

Сказал(а) «Спасибо»: 2 раз
Здравствуйте,

После установки JCP перестала работать прокси авторизация, выходит ошибка:
Цитата:
Exception in thread "main" javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty


Экспериментальным путем выяснилось, что проблема в файле jre\lib\security\java.security.
Если вернуть этот файл на тот, который был до установки JCP, то прокси авторизация работает, но не работает JCP...
Как можно разрулить эту ситуацию?

Вот код:
Код:
CredentialsProvider credsProvider = new BasicCredentialsProvider();
    
    credsProvider.setCredentials(
            new AuthScope("10.X.X.X", 8080),
            new UsernamePasswordCredentials("domain\\login", "password"));
    CloseableHttpClient httpclient = HttpClients.custom()
            .setDefaultCredentialsProvider(credsProvider).build();
    try {
        HttpHost target = new HttpHost("ya.ru", 80, "http");
        HttpHost proxy = new HttpHost("10.X.X.X", 8080);

        RequestConfig config = RequestConfig.custom()
            .setProxy(proxy)
            .build();
        HttpGet httpget = new HttpGet("/index.htm");
        httpget.setConfig(config);

        System.out.println("Обращение к " + httpget.getRequestLine() + " на " + target + " используя " + proxy);

        CloseableHttpResponse response = httpclient.execute(target, httpget);
        HttpEntity resEntity = response.getEntity();
        
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        String ServerResponse="";
        if (resEntity != null) {
            resEntity.writeTo(baos);
            ServerResponse = baos.toString("Utf-8");
        }
        
        EntityUtils.consume(resEntity);        
        response.close();
        
        if(response.getStatusLine().getStatusCode() != 200) {
             System.err.println("Server return error status: " + response.getStatusLine());
        } else {
            System.out.println(ServerResponse);
        }        
        
    } finally {
        httpclient.close();
    }


Offline Евгений Афанасьев  
#2 Оставлено : 22 марта 2016 г. 19:02:25(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Здравствуйте.
Если вы установили JTLS (модуль cpSSL для ГОСТ TLS) и он не нужен, то удалите его.
Offline RKM  
#3 Оставлено : 23 марта 2016 г. 7:53:18(UTC)
RKM

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

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

Сказал(а) «Спасибо»: 2 раз
без JTLS не удается подключиться к гозакупкам:
если поменять sslContext = SSLContext.getInstance("GostTLS") на sslContext = SSLContext.getInstance("TLS"), ты выходит ошибка при подключении:
Цитата:
Server selected improper ciphersuite TLS_DH_RSA_WITH_AES_128_CBC_SHA
Offline Евгений Афанасьев  
#4 Оставлено : 23 марта 2016 г. 10:06:35(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: RKM Перейти к цитате
проблема в файле jre\lib\security\java.security

Вы уверены, что проблема в этом? JTLS не использует этот файл.
Offline RKM  
#5 Оставлено : 23 марта 2016 г. 10:36:22(UTC)
RKM

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

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

Сказал(а) «Спасибо»: 2 раз
проверил еще раз:
если использовать базовый java.security JRE java.security.txt (27kb) загружен 6 раз(а)., тогда не работает код "sslContext = SSLContext.getInstance("GostTLS");"
Ошибка:
java.security.NoSuchAlgorithmException: GostTLS SSLContext not available

С java.security после установки JCP+JTLS java.security_after inst jcp.txt (27kb) загружен 5 раз(а). код код "sslContext = SSLContext.getInstance("GostTLS");" работает, но не работает proxy авторизация (первый пост).
Offline Евгений Афанасьев  
#6 Оставлено : 23 марта 2016 г. 11:16:44(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Когда не установлен cpSSL, естественно, SSLContext.getInstance("GostTLS") работать не будет. Приведите полный лог (стектрейс) ошибки из 1-го поста.
Offline RKM  
#7 Оставлено : 23 марта 2016 г. 12:25:19(UTC)
RKM

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

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

Сказал(а) «Спасибо»: 2 раз
cpSSL был в обоих случаях установлен. Все манипуляции проводились только с файлом java.security.
StackTrace:
Цитата:
run:
Обращение к GET /index.htm HTTP/1.1 на http://ya.ru:80 используя http://10.97.1.22:8080
мар 23, 2016 2:15:42 PM org.apache.http.impl.auth.HttpAuthenticator generateAuthResponse
WARNING: NEGOTIATE authentication error: No valid credentials provided (Mechanism level: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt))
мар 23, 2016 2:15:42 PM org.apache.http.impl.auth.HttpAuthenticator generateAuthResponse
WARNING: KERBEROS authentication error: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)
мар 23, 2016 2:15:42 PM org.apache.http.impl.auth.HttpAuthenticator generateAuthResponse
WARNING: NTLM authentication error: Credentials cannot be used for NTLM authentication: org.apache.http.auth.UsernamePasswordCredentials
Exception in thread "main" 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:1949)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1906)
at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1889)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1410)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.upgrade(DefaultHttpClientConnectionOperator.java:185)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.upgrade(PoolingHttpClientConnectionManager.java:369)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:415)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:117)
at javaapplication2.ProxyTest.main(ProxyTest.java:57)
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at ru.CryptoPro.ssl.w.<init>(Unknown Source)
at ru.CryptoPro.ssl.g.b(Unknown Source)
at ru.CryptoPro.ssl.g.checkServerTrusted(Unknown Source)
at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:922)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
... 12 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)
... 23 more
Java Result: 1
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 2 секунды)
Offline RKM  
#8 Оставлено : 23 марта 2016 г. 12:52:35(UTC)
RKM

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

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

Сказал(а) «Спасибо»: 2 раз
Для себя нашел временное решение в замене в файле java.security участка кода

ssl.KeyManagerFactory.algorithm=GostX509
ssl.TrustManagerFactory.algorithm=GostX509


на следующий (стандартный из инсталлятора JRE)

ssl.KeyManagerFactory.algorithm=SunX509
ssl.TrustManagerFactory.algorithm=PKIX



При этом в моем случае работает и SSLContext.getInstance("GostTLS") и прокси авторизация.

Но хотелось бы получить другое решение, а не заглушку..
Offline miser  
#9 Оставлено : 23 марта 2016 г. 13:23:12(UTC)
miser

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

Группы: Участники
Зарегистрирован: 14.03.2011(UTC)
Сообщений: 153
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 1 раз
Поблагодарили: 7 раз в 5 постах
Код:
HttpHost target = new HttpHost("ya.ru", 80, "http");
HttpHost proxy = new HttpHost("10.X.X.X", 8080);

Поставьте для переменной proxy название схемы "http" и будет вам счастье.
По умолчанию, если схема не указана, берется схема базового URL. В показанном примере будет "http", а в рабочей системе будет https.
Offline Евгений Афанасьев  
#10 Оставлено : 23 марта 2016 г. 13:56:24(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 714 раз в 674 постах
Автор: RKM Перейти к цитате
cpSSL был в обоих случаях установлен. Все манипуляции проводились только с файлом java.security

В первом вложенном java.security провайдер ru.CryptoPro.ssl.Provider отсутствует, потому недоступен GostTLS.
Возможно, проблема в том, что SSLContextImpl (cpSSL) инициализируется неявно без указания хранилища доверенных сертификатов (CertStore). Хранилище нужно создать, поместить в него корневые сертификаты, указать с помощью
System.setProperty("javax.net.ssl.trustStoreType", "CertStore");
System.setProperty("javax.net.ssl.trustStore", "store");
System.setProperty("javax.net.ssl.trustStorePassword", "password");
или передать в SSLContext.init().
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.