Mam plik certyfikatu .p12, a ja używam SSL Converter, aby przekonwertować go do pliku certyfikatu .pem. Następnie używam tego pliku certyfikatu PEM w moim kodzie androidowym:Jak wykonać żądanie https z certyfikatem ssl w Retroficie
OkHttpClient okHttpClient = new OkHttpClient();
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream instream = context.getResources().openRawResource(R.raw.pem_certificate);
Certificate ca;
ca = cf.generateCertificate(instream);
KeyStore kStore = KeyStore.getInstance(KeyStore.getDefaultType());
kStore.load(null, null);
kStore.setCertificateEntry("ca", ca);
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(kStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), null);
okHttpClient.setSslSocketFactory(sslContext.getSocketFactory());
} catch (CertificateException
| KeyStoreException
| NoSuchAlgorithmException
| IOException
| KeyManagementException e) {
e.printStackTrace();
}
baseURL = endpoint;
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(baseURL)
.setClient(new OkClient(okHttpClient))
.build();
service = restAdapter.create(DishService.class);
Ale ten kod nie działa. Nie powiodło się w linii "ca = cf.generateCertificate (instream);" z komunikatem CertificateException.
Proszę przyjrzeć się tej odpowiedzi: http://stackoverflow.com/a/31436459/4261176. –
https://gist.github.com/erikcaffrey/10af1cc0b99a54f5b9a8a7614cca6f0a Mam nadzieję, że to pomoże komuś! –
Użyj tego najprostszego rozwiązania: https://stackoverflow.com/a/45855405/3448003 –