logo Наши способы организации безопасного удалённого доступа к рабочим местам и корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline vdchernikov  
#1 Оставлено : 1 ноября 2019 г. 14:14:26(UTC)
vdchernikov

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

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

Просим подсказать код для соединения по okhttp3 клиенту (если можно для двухфакторной аутентификации, как передать KeyManager)

Сделали рабочий код на HttpsURLconnection (Android 6.0)
соединение с тестовым сервером криптоПРО и с нашим (двустороння аутентификация) - работает

Теперь пробуем сделать на okhttp3 клиенте, даже с тестовым сервером КриптоПРО, но возникает ошибка

Unable to find acceptable protocols. isFallback=false, modes=[ConnectionSpec(cipherSuites=[TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA], tlsVersions=[TLS_1_3, TLS_1_2], supportsTlsExtensions=true), ConnectionSpec()], supported protocols=[TLSv1]

и потом

Unable to find acceptable protocols. isFallback=false, modes=[ConnectionSpec(cipherSuites=[TLS_CIPHER_2012, TLS_CIPHER_2001], tlsVersions=[TLS_1_3, TLS_1_2], supportsTlsExtensions=true)], supported protocols=[TLSv1]

Ниже примеры как мы делаем

Работающий наш пример

Код:
public Void DoHttpsConnect() throws Exception
    {
        HttpsURLConnection connection = null;
        int code = 0;
        Map<String, List<String>> headers;

        try {

            SSLContext sslContext = CreateKristaSSLContext();
            SSLSocketFactory sslFactory = sslContext.getSocketFactory();

            // SSLSocketFactory delegateFactory = new NoSSLv3SocketFactory(sslFactory);
            HttpsURLConnection.setDefaultSSLSocketFactory(sslFactory);

            // URL url = new URL("https://cpca.cryptopro.ru/");
            // URL url = new URL("https://lk.budget.gov.ru/piao/");
            URL url = new URL("https://lk2012.budget.gov.ru/piao/");

            connection = InitBaseRequest(url);
            connection.connect();

            code = connection.getResponseCode();

            headers = connection.getHeaderFields();

        }
        catch (Exception exc)
        {
            String str = exc.getMessage();
        }
        finally {

            if (connection != null) {
                connection.disconnect();
            } // if

        }

        return null;
    }



Попытка сделать на Okhttp3

Код:
public Void DoOkHttpRequest()
    {
        try {

            URL url = new URL("https://cpca.cryptopro.ru/default.htm");

            SSLContext sslContext = CreateKristaSSLContext();
            SSLSocketFactory sslFactory = sslContext.getSocketFactory();

            OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.followSslRedirects(false);

            TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
            builder.sslSocketFactory(sslFactory, (X509TrustManager) trustManagerFactory.getTrustManagers()[0]);

            // Задание необходимых параметров (сюиты, протокол).
            ConnectionSpec spec = new ConnectionSpec.Builder(
                    ConnectionSpec.MODERN_TLS)
                    .cipherSuites(
                            "TLS_CIPHER_2012",
                            "TLS_CIPHER_2001")
                    .build();

            builder.connectionSpecs(Collections.singletonList(spec));

            OkHttpClient httpOkClinet = builder.build();
            Request request = new Request.Builder()
                    .url(url)
                    .build();

            // Обращение к серверу.
            Response response = httpOkClinet.newCall(request).execute();

            // Вывод полученного ответа.
            System.out.print(response.body().string());

            // keyManagerFactory.getKeyManagers()[0]
            // builder.addInterceptor();
        }
        catch (Exception exc)
        {
            String str = "";
        }

        return null;
    }



Заранее спасибо!

Отредактировано пользователем 1 ноября 2019 г. 14:49:13(UTC)  | Причина: Не указана

Offline Евгений Афанасьев  
#2 Оставлено : 3 ноября 2019 г. 11:40:40(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 468 раз в 450 постах
Здравствуйте.
Посмотрите в последнем дистрибутиве, в ACSPClientApp (в исходниках в папке gradle/ACSPClientApp) есть пример работы с okhttp.

Отредактировано пользователем 3 ноября 2019 г. 11:41:13(UTC)  | Причина: Не указана

Offline vdchernikov  
#3 Оставлено : 4 ноября 2019 г. 15:18:41(UTC)
vdchernikov

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

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

Здравстввуйте, пример этот я и использовал в качестве основы

D:\projects\android-csp-5.0.40424\javadoc\samples-sources\JTLS_samples\OkHTTPClientSample.java

но в нем непонятно что за параметры
Код:

// Задание необходимых параметров (сюиты, протокол).
        ConnectionSpec spec = new ConnectionSpec.Builder(
                ConnectionSpec.MODERN_TLS)
                .cipherSuites(
                        "TLS_CIPHER_2012",
                        "TLS_CIPHER_2001")
                .build();


и почему возникает такая ошибка у нас.
Свзяаться сначала пытаемся с сервером https://cpca.cryptopro.ru/default.htm
Offline Евгений Афанасьев  
#4 Оставлено : 4 ноября 2019 г. 16:11:35(UTC)
Евгений Афанасьев

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

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

Сказал(а) «Спасибо»: 14 раз
Поблагодарили: 468 раз в 450 постах
А сам пример из дистрибутива работает?
Offline vdchernikov  
#5 Оставлено : 4 ноября 2019 г. 17:37:23(UTC)
vdchernikov

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

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

В самом примере ACSPClientApp, в последнем дистрибутиве нету примеров с OkHTTPClient,
а тот который я нашел он просто лежит в каталоге android-csp-5.0.40424\javadoc\samples-sources\JTLS_samples
и нигде не используется;

В ACSPClientApp работает тольк пример через HttpUrlConnection с https://cpca.cryptopro.ru/default.htm;
а с OkHTTPClient нету
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.