Zajmuję się tworzeniem prostej aplikacji, która używa protokołu https do publikowania i pobierania danych z serwera. Szukałem w Internecie, ale dostępnych jest niewiele zasobów, próbowałem większości z nich, ale nie mogłem tego zrobić z powodzeniem.HttpsURLconnection do publikowania i uzyskiwania dostępu do systemu Android
Próbowałem z HttpClient to był sukces, ale chcę to zrobić z HttpsURLconnection
Czy muszę wziąć klucz publiczny RSA od urządzenia, a jeśli tak, w jaki sposób można to zrobić.
Czy ktoś może mi powiedzieć, jak mogę to osiągnąć, używając 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;
}
Większość czasu jestem coraz uzyskiwanie błąd:
Caused by: `java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.`
Może sprawdzić ten komunikat o błędzie? http://stackoverflow.com/questions/6825226/trust-anchor-not-found-for-android-ssl-connection –
Czy to pomoże? http://www.compiletimeerror.com/2013/01/login-application-for-android-android.html#.Vue4EOb35zl Zwłaszcza punkt numer 4? – Stallion
Spróbuj użyć biblioteki Volley. Mam nadzieję, że to pomoże! –