up to 24 api level, my code works fine, but it gives me an error at 24 api level (7.0 nougat). I do not understand what is happening with my code.
The first approach is here:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <certificates src="system"/> <certificates src="user"/> </trust-anchors> </base-config> <domain-config> <domain includeSubdomains="true">xyz.com</domain> <trust-anchors> <certificates src="@raw/my_ca"/> </trust-anchors> </domain-config> </network-security-config>
Inside the manifest file:
android:network Security Config = "@xml/network_security_config"
I have included network_security_config
inside res/xml/network_security_config
and ca
certificate inside res/raw/my_ca.pem
The second approach is here:
import org.apache.http.client.HttpClient; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; public class ExSSLSocketFactory extends SSLSocketFactory { SSLContext sslContext = SSLContext.getInstance("TLS"); public ExSSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException,KeyStoreException, UnrecoverableKeyException { super(truststore); TrustManager x509TrustManager = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }; sslContext.init(null, new TrustManager[] { x509TrustManager }, null); } public ExSSLSocketFactory(SSLContext context) throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException, UnrecoverableKeyException { super(null); sslContext = context; } @Override public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose); } @Override public Socket createSocket() throws IOException { return sslContext.getSocketFactory().createSocket(); } public static HttpClient getHttpsClient(HttpClient client) { try{ X509TrustManager x509TrustManager = new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } @Override public X509Certificate[] getAcceptedIssuers() { return null; } }; SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[]{x509TrustManager}, null); SSLSocketFactory sslSocketFactory = new ExSSLSocketFactory(sslContext); sslSocketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ClientConnectionManager clientConnectionManager = client.getConnectionManager(); SchemeRegistry schemeRegistry = clientConnectionManager.getSchemeRegistry(); schemeRegistry.register(new Scheme("https", sslSocketFactory, 443)); return new DefaultHttpClient(clientConnectionManager, client.getParams()); } catch (Exception ex) { return null; } } }
When creating an http connection:
public String CallWebService(String url, String soapAction, String envelope){ final HttpClient httpClient = ExSSLSocketFactory.getHttpsClient(new DefaultHttpClient()); HttpParams params = httpClient.getParams(); HttpConnectionParams.setConnectionTimeout(params, 150000); HttpConnectionParams.setSoTimeout(params, 150000); HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), true); HttpPost httppost = new HttpPost(url); httppost.setHeader("soapaction", soapAction); httppost.setHeader("Content-Type", "text/xml; charset=utf-8"); String responseString = ""; try { HttpEntity entity = new StringEntity(envelope); httppost.setEntity(entity); ResponseHandler<String> rh = new ResponseHandler<String>() { public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException { HttpEntity entity = response.getEntity(); StringBuffer out = new StringBuffer(); byte[] b = EntityUtils.toByteArray(entity); out.append(new String(b, 0, b.length)); return out.toString(); } }; responseString = httpClient.execute(httppost, rh); Log.d("Response is here....", "responseString : " + responseString); } catch (Exception e) { e.printStackTrace(); }
However, I get an error message:
javax.net.ssl.SSLHandshakeException: connection closed by peer 01-24 10: 28: 03.182 32251-474 / com.neosoft.meconnect W / System.err: at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake (native method ) 01-24 10: 28: 03.182 32251-474 / com.neosoft.meconnect W / System.err:
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake (OpenSSLSocketImpl.javahaps57) 01-24 10: 28: 03.182 32251-474 / com.neosoft.meconnect W / System.err:
at com.android.okhttp.Connection.connectTls (Connection.java:235) 01-24 10: 28: 03.182 32251-474 / com.neosoft.meconnect W / System.err: at com.android.okhttp.Connection.connectSocket (Connection.java:199) 01-24 10: 28: 03.182 32251-474 / com.neosoft.meconnect W / System.err: at com.android.okhttp.Connection.connect (Connection.java:172) 01-24 10: 28: 03.182 32251-474 / com.neosoft.meconnect W / System.err: at com.android.okhttp.Connection.connectAndSetOwner (Connection.javahaps67) 01-24 10: 28: 03.182 32251-474 / com .neosoft.meconnect W / System.err:
at com.android.okhttp.OkHttpClient $ 1.connectAndSetOwner (OkHttpClient.java:130) 01-24 10: 28: 03.182 32251-474 / com.neosoft.meconnect W / System.err:
in com.android.okhttp.internal.http.HttpEngine.connect (HttpEngine.java:329) 01-24 10: 28: 03.182 32251-474 / com.neosoft.meconnect W / System.err:
in com.android.okhttp.internal.http.HttpEngine.sendRequest (HttpEngine.java:246) 01-24 10: 28: 03.183 32251-474 / com.neosoft.meconnect W / System.err:
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute (HttpURLConnectionImpl.java:457) 01-24 10: 28: 03.183 32251-474 / com.neosoft.meconnect W / System.err:
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect (HttpURLConnectionImpl.java:126) 01-24 10: 28: 03.183 32251-474 / com.neosoft.meconnect W / System.err:
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect (DelegatingHttpsURLConnection.java:89) 01-24 10: 28: 03.184 32251-474 / com.neosoft.meconnect W / System.err:
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect (HttpsURLConnectionImpl.java) 01-24 10: 28: 03.184 32251-474 / com.neosoft.meconnect W / System.err:
at org.ksoap2.transport.ServiceConnectionSE.connect (ServiceConnectionSE.java:46) 01-24 10: 28: 03.184 32251-474 / com.neosoft.meconnect W / System.err:
at org.ksoap2.transport.HttpTransportSE.call (HttpTransportSE.java:68) 01-24 10: 28: 03.184 32251-474 / com.neosoft.meconnect W / System.err:
at srd.gshelp.GSSoapConWSDL.javaHit (GSSoapConWSDL.java:180) 01-24 10: 28: 03.184 32251-474 / com.neosoft.meconnect W / System.err: at srd.gshelp.GSSoapConWSDL.access $ 0 (GSSoapLC java: 144) 01-24 10: 28: 03.185 32251-474 / com.neosoft.meconnect W / System.err: at srd.gshelp.GSSoapConWSDL $ TaskAsync.doInBackground (GSSoapConWSDL.java:215) 01-24 10: 28 : 03.185 32251-474 / com.neosoft.meconnect W / System.err:
at srd.gshelp.GSSoapConWSDL $ TaskAsync.doInBackground (GSSoapConWSDL.java:1) 01-24 10: 28: 03.185 32251-474 / com.neosoft.meconnect W / System.err:
at android.os.AsyncTask $ 2.call (AsyncTask.java:304) 01-24 10: 28: 03.185 32251-474 / com.neosoft.meconnect W / System.err: at java.util.concurrent.FutureTask.run ( FutureTask.java:237) 01-24 10: 28: 03.186 32251-474 / com.neosoft.meconnect W / System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1133) 01-24 10 : 28: 03.186 32251-474 / com.neosoft.meconnect W / System.err:
in java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:607) 01-24 10: 28: 03.186 32251-474 / com.neosoft.meconnect W / System.err:
at java.lang.Thread.run (Thread.java:761) 01-24 10: 28: 03.187 32251-474 / com.neosoft.meconnect W / System.err: Suppressed: javax.net.ssl.SSLHandshakeException: connection closed peer
Kindly help. Thanks at Advance.