Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.10.2019(UTC) Сообщений: 28 Откуда: Ярославская обл. Сказал(а) «Спасибо»: 1 раз
|
Просим подсказать код для соединения по 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)
| Причина: Не указана
|