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

Required method checkServerTrusted(X509Certificate[], String, String, String) missing (3.13.0) #4669

Closed
flocsy opened this issue Feb 27, 2019 · 3 comments
Labels
bug Bug in existing code needs info More information needed from reporter

Comments

@flocsy
Copy link

flocsy commented Feb 27, 2019

When upgrading from 3.12.1 to 3.13.0 I get these exceptions:

2019-02-27 22:47:21.106 24799-24799 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.fletech.trackid, PID: 24799
    java.lang.AssertionError: java.lang.reflect.InvocationTargetException
        at okhttp3.internal.platform.AndroidPlatform.buildCertificateChainCleaner(AndroidPlatform.java:201)
        at okhttp3.internal.tls.CertificateChainCleaner.get(CertificateChainCleaner.java:41)
        at okhttp3.OkHttpClient$Builder.sslSocketFactory(OkHttpClient.java:821)
        at org.foo.manager.service.HttpClient.getHttpClientBuilder(HttpClient.java:102)
        at org.foo.manager.service.HttpClient.getClient(HttpClient.java:166)
        at org.foo.manager.service.WebSocketRx.<init>(WebSocketRx.java:49)
        at org.foo.manager.service.WebSocketRx.init(WebSocketRx.java:37)
        at org.foo.manager.service.Devices.init(Devices.java:36)
        at org.foo.manager.MainApplication.onCreate(MainApplication.java:46)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
        at android.app.ActivityThread.access$1100(ActivityThread.java:199)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at okhttp3.internal.platform.AndroidPlatform.buildCertificateChainCleaner(AndroidPlatform.java:196)
        at okhttp3.internal.tls.CertificateChainCleaner.get(CertificateChainCleaner.java:41) 
        at okhttp3.OkHttpClient$Builder.sslSocketFactory(OkHttpClient.java:821) 
        at org.foo.manager.service.HttpClient.getHttpClientBuilder(HttpClient.java:102) 
        at org.foo.manager.service.HttpClient.getClient(HttpClient.java:166) 
        at org.foo.manager.service.WebSocketRx.<init>(WebSocketRx.java:49) 
        at org.foo.manager.service.WebSocketRx.init(WebSocketRx.java:37) 
        at org.foo.manager.service.Devices.init(Devices.java:36) 
        at org.foo.manager.MainApplication.onCreate(MainApplication.java:46) 
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871) 
        at android.app.ActivityThread.access$1100(ActivityThread.java:199) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
     Caused by: java.lang.IllegalArgumentException: Required method checkServerTrusted(X509Certificate[], String, String, String) missing
        at android.net.http.X509TrustManagerExtensions.<init>(X509TrustManagerExtensions.java:72)
        at java.lang.reflect.Constructor.newInstance0(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343) 
        at okhttp3.internal.platform.AndroidPlatform.buildCertificateChainCleaner(AndroidPlatform.java:196) 
        at okhttp3.internal.tls.CertificateChainCleaner.get(CertificateChainCleaner.java:41) 
        at okhttp3.OkHttpClient$Builder.sslSocketFactory(OkHttpClient.java:821) 
        at org.foo.manager.service.HttpClient.getHttpClientBuilder(HttpClient.java:102) 
        at org.foo.manager.service.HttpClient.getClient(HttpClient.java:166) 
        at org.foo.manager.service.WebSocketRx.<init>(WebSocketRx.java:49) 
        at org.foo.manager.service.WebSocketRx.init(WebSocketRx.java:37) 
        at org.foo.manager.service.Devices.init(Devices.java:36) 
        at org.foo.manager.MainApplication.onCreate(MainApplication.java:46) 
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871) 
        at android.app.ActivityThread.access$1100(ActivityThread.java:199) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

    private OkHttpClient.Builder getHttpClientBuilder(boolean ignoreSslErrors) {
        if(!ignoreSslErrors){
            return new OkHttpClient.Builder();
        }

        final TrustManager[] trustAllCerts = new TrustManager[] {
                new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                    }

                    @Override
                    public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                    }

                    @Override
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return new java.security.cert.X509Certificate[]{
                        };
                    }
                }
        };

        SSLContext sslContext;
        try {
            sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
        }
        catch (Exception exception){
            throw new RuntimeException(exception);
        }

        final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);
        builder.hostnameVerifier((hostname, session) -> true);
        return builder;
    }

@flocsy flocsy added the bug Bug in existing code label Feb 27, 2019
@swankjesse
Copy link
Member

Does adding another checkServerTrusted method fix?

        final TrustManager[] trustAllCerts = new TrustManager[] {
                new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                    }

                    @Override
                    public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                    }

                    // Called reflectively by X509TrustManagerExtensions.
                    public void checkServerTrusted(java.security.cert.X509Certificate[], String authType, String host) {
                    }

                    @Override
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return new java.security.cert.X509Certificate[]{
                        };
                    }
                }
        };

@swankjesse swankjesse added the needs info More information needed from reporter label Mar 3, 2019
@flocsy flocsy closed this as completed Mar 5, 2019
@TikTak123
Copy link

Hello everbody
I also have this problem. @flocsy Did you find any solution?
For me it's happens only in android 10
I didn't find any solution from the internet.
Here is my question in stackoverflow
https://stackoverflow.com/questions/60110848/how-to-disable-ssl-verification-on-android

@ersushil
Copy link

Add the upgraded version of OKttps worked for me crashing in Android 10

implementation 'com.squareup.okhttp3:okhttp:4.8.0'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Bug in existing code needs info More information needed from reporter
Projects
None yet
Development

No branches or pull requests

4 participants