Sto sviluppando una semplice applicazione che utilizza il protocollo https per pubblicare e ottenere dati dal server. Ho cercato su internet ma ci sono poche risorse disponibili, ho provato la maggior parte di esse ma non ho potuto farlo con successo.HttpsURLconnection per pubblicare e accedere a Android
ho provato con HttpClient era successo, ma voglio farlo con HttpsURLConnection
Ho bisogno di prendere la chiave pubblica RSA dal dispositivo, in caso affermativo come posso farlo.
Qualcuno può dirmi come ottenerlo utilizzando httpsURLconnection
.
protected String doInBackground(String... arg0) {
try {
ByteArrayInputStream derInputStream = new ByteArrayInputStream(app.certificateString.getBytes());
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509","BC");
X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate(derInputStream);
String alias = "alias";//cert.getSubjectX500Principal().getName();
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null);
trustStore.setCertificateEntry(alias, cert);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
kmf.init(trustStore, null);
KeyManager[] keyManagers = kmf.getKeyManagers();
TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
tmf.init(trustStore);
TrustManager[] trustManagers = tmf.getTrustManagers();
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, trustManagers, null);
URL url = new URL("MY HTTPS URL");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(sslContext.getSocketFactory());
// set Timeout and method
conn.setReadTimeout(7000);
conn.setConnectTimeout(7000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
// Add any data you wish to post here
conn.connect();
String reult = String.valueOf(conn.getInputStream());
Log.d("connection : ", String.valueOf(reult));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
}
return null;
}
maggior parte del tempo sto ottenendo ottenere l'errore:
Caused by: `java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.`
Forse verificare questo messaggio di errore? http://stackoverflow.com/questions/6825226/trust-anchor-not-found-for-android-ssl-connection –
Questo sarà di aiuto? http://www.compiletimeerror.com/2013/01/login-application-for-android-android.html#.Vue4EOb35zl Specialmente il punto numero 4? – Stallion
Provare a utilizzare la libreria Volley. Spero che sia d'aiuto! –