Je développe une application simple qui utilise le protocole https pour publier et obtenir des données du serveur. J'ai cherché sur internet mais il y a peu de ressources disponibles, j'ai essayé la plupart d'entre eux mais je n'ai pas pu le faire avec succès.HttpsURLconnection pour publier et entrer dans Android
J'ai essayé avec HttpClient ce fut le succès, mais je veux le faire avec HttpsURLConnection
Dois-je prendre la clé publique RSA de l'appareil, si oui, comment puis-je faire cela.
Quelqu'un peut-il me dire comment puis-je y parvenir en utilisant 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;
}
La plupart du temps, je reçois obtenir l'erreur:
Caused by: `java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.`
Peut-être que vous vérifiez ce message d'erreur? http://stackoverflow.com/questions/6825226/trust-anchor-not-found-for-android-ssl-connection –
Est-ce que celui-ci aidera? http://www.compiletimeerror.com/2013/01/login-application-for-android-android.html#.Vue4EOb35zl Surtout le point numéro 4? – Stallion
Essayez d'utiliser la bibliothèque Volley. J'espère que cela aide! –