2015-06-11 15 views
6

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.

+1

Proszę przyjrzeć się tej odpowiedzi: http://stackoverflow.com/a/31436459/4261176. –

+0

https://gist.github.com/erikcaffrey/10af1cc0b99a54f5b9a8a7614cca6f0a Mam nadzieję, że to pomoże komuś! –

+0

Użyj tego najprostszego rozwiązania: https://stackoverflow.com/a/45855405/3448003 –

Odpowiedz

3

Może masz problem w R.raw.pem_certificate ...

1) Spróbuj uzyskać surowy certyfikat publiczny z serwera za pomocą OpenSSL: openssl s_client -connect {HOSTNAME}: {port } -showcerts

(proszę spojrzeć tutaj szczegóły: https://superuser.com/questions/97201/how-to-save-a-remote-server-ssl-certificate-locally-as-a-file)

2) Jak skonfigurować Retrofit2 z sertificate zwyczaj SSL https://adiyatmubarak.wordpress.com/tag/add-ssl-certificate-in-retrofit-2/

lub Retrofit1: https://number1.co.za/use-retrofit-self-signed-unknown-ssl-certificate-android/

PS: to działa na mnie, proszę nie przekonwertować plik PEM do BKS.

Powiązane problemy