Ich entwickle eine einfache Anwendung, die https-Protokoll verwendet, um Daten vom Server zu posten und zu erhalten. Ich suchte im Internet, aber es gibt nur wenige verfügbare Ressourcen, ich habe die meisten von ihnen ausprobiert, konnte es aber nicht erfolgreich machen.HttpsURLconnection zum Posten und erhalten in Android
Ich habe versucht, mit Httpclient es war erfolgreich, aber ich will, es zu tun mit HttpsURLConnection
Muß ich den öffentlichen RSA-Schlüssel aus dem Gerät nehmen, wenn ja, wie ich das tun kann.
Kann mir jemand sagen, wie kann ich dies erreichen mit 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;
}
Die meiste Zeit ich immer die Störung erhalte:
Caused by: `java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.`
Vielleicht diese Fehlermeldung Sie überprüfen? http://stackoverflow.com/questions/6825226/trust-anchor-not-found-for-android-ssl-connection –
Wird dieser helfen? http://www.competimeerror.com/2013/01/login-application-for-android-android.html#.Vue4EOb35zl Besonders Punkt Nummer 4? – Stallion
Versuchen Sie, die Volley-Bibliothek zu verwenden. Ich hoffe es hilft! –