Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. #107

Open
mannummm11 opened this issue Sep 9, 2017 · 1 comment

Comments

@mannummm11
Copy link

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
09-09 12:01:43.811 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:333)
09-09 12:01:43.811 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.okhttp.internal.http.SocketConnector.connectTls(SocketConnector.java:103)
09-09 12:01:43.811 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.okhttp.Connection.connect(Connection.java:169)
09-09 12:01:43.811 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:211)
09-09 12:01:43.811 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)
09-09 12:01:43.811 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:352)
09-09 12:01:43.811 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:341)
09-09 12:01:43.812 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:259)
09-09 12:01:43.812 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:454)
09-09 12:01:43.812 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405)
09-09 12:01:43.812 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:518)
09-09 12:01:43.812 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
09-09 12:01:43.812 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java)
09-09 12:01:43.812 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.thin.downloadmanager.DownloadDispatcher.executeDownload(DownloadDispatcher.java:135)
09-09 12:01:43.812 31697-32142/com.logimetrix.nj.cairn W/System.err: at com.thin.downloadmanager.DownloadDispatcher.run(DownloadDispatcher.java:83)

Please answer me if any one faced same issue

@noangel
Copy link

noangel commented Nov 27, 2018

The reason is HttpURLConnection does check of server certificate which fails, and exception is thrown.
You need to fix DownloadDispatcher.java:

  1. Use HttpsURLConnection instead of HttpURLConnection
import javax.net.ssl.HttpsURLConnection;
...
private void transferData(HttpsURLConnection conn)
...
private int readResponseHeaders( HttpsURLConnection conn)
...
  1. Create SSL context:
SSLContext sslContext = null;
try {
            TrustManager[] tm = {
                    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.getInstance("SSL");
            sslContext.init(null, tm, null);
            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            });
        } catch(Exception e) {
            e.printStackTrace();
        }
  1. After
conn = (HttpsURLConnection) url.openConnection();

add

conn.setSSLSocketFactory(sslContext.getSocketFactory());

done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants