<pre name="code" class="java">private static String CER = "-----BEGIN CERTIFICATE-----" +
private static void setCertificates(OkHttpClient okHttpClient, InputStream... certificates) {
try {
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null);
int index = 0;
for (InputStream certificate : certificates) {
String certificateAlias = Integer.toString(index++);
keyStore.setCertificateEntry(certificateAlias, certificateFactory.generateCertificate(certificate));
try {
if (certificate != null)
certificate.close();
} catch (IOException e) {
}
}
SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
sslContext.init
(
null,
trustManagerFactory.getTrustManagers(),
new SecureRandom()
);
okHttpClient.setSslSocketFactory(sslContext.getSocketFactory());
} catch (Exception e) {
e.printStackTrace();
}
}
<pre name="code" class="java"> @Provides
@Singleton
Retrofit provideRetrofit() {
File cacheDir = new File(String.valueOf(application.getCacheDir()), "HttpResponseCache");
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setCache(new Cache(cacheDir, 10 * 1024 * 1024));
okHttpClient.setConnectTimeout(5 * 1000, TimeUnit.MILLISECONDS);
okHttpClient.setReadTimeout(5 * 1000, TimeUnit.MILLISECONDS);
setCertificates(okHttpClient, new Buffer()
.writeUtf8(CER)
.inputStream());
Retrofit retrofit = new Retrofit.Builder()
.client(okHttpClient)
.baseUrl(HTTP_URL)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(JacksonConverterFactory.create())
.build();
return retrofit;
}