Я звоню API с устройства версии android 4.4, которое поддерживает только TLSV1.2, вы можете проверить здесь . Так что, если я добавляю сертификаты в запрос, он работает нормально, но API не требует никаких сертификатов, поэтому без сертификатов
не может найти приемлемое исключение протокола.
Я попытался включить TLSV1.2, используя следующий код:
ConnectionSpec requireTls12 = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(TlsVersion.TLS_1_2)
.build();
OkHttpClient client = new OkHttpClient.Builder()
.connectionSpecs(Arrays.asList(requireTls12))
.build();
return client.newBuilder().build();
и все другие решения
Я не могу использовать ProviderInstaller из Служб Google Play для его включения, поскольку на моем устройстве не установлены службы Google Play.
это рабочий код с клиентскими сертификатами:
CertificateFactory certificateFactory = null;
Certificate certificate = null;
OkHttpClient.Builder builder = new OkHttpClient.Builder();
try {
certificateFactory = CertificateFactory.getInstance("X.509");
certificate = certificateFactory.generateCertificate(certInputStream);
// Create a KeyStore containing our trusted CAs
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", certificate);
// Create a TrustManager that trusts the CAs in our KeyStore
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
// Create an SSLContext that uses our TrustManager
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
//Initialize Interceptors
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
//Assign custom trusted ssl to builder
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
builder.sslSocketFactory(sslSocketFactory);
builder.addInterceptor(loggingInterceptor);
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
} catch (CertificateException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
Может кто-нибудь предложить решение для этого?