Skip to content

sslSocketFactory NullPointException #2361

@lizhangqu

Description

@lizhangqu
OkHttpClient.Builder mBuilder=mBuilder = new OkHttpClient.Builder();
mBuilder.sslSocketFactory(createSSLSocketFactory());
mBuilder.hostnameVerifier(new TrustAllHostnameVerifier());
mBuilder.build();
/**
 * 默认信任所有的证书
 * TODO 最好加上证书认证,主流App都有自己的证书
 *
 * @return
 */
@SuppressLint("TrulyRandom")
private static SSLSocketFactory createSSLSocketFactory() {

    SSLSocketFactory sSLSocketFactory = null;

    try {
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, new TrustManager[]{new TrustAllManager()},
                new SecureRandom());
        sSLSocketFactory = sc.getSocketFactory();
    } catch (Exception e) {
    }

    return sSLSocketFactory;
}

private static class TrustAllManager implements 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;
    }
}

private static class TrustAllHostnameVerifier implements HostnameVerifier {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
}

this will cause NullPointException in 3.1.2,but it's ok in 3.0.1

Caused by: java.lang.NullPointerException: Attempt to get length of null array
    at okhttp3.internal.tls.RealTrustRootIndex.<init>(RealTrustRootIndex.java:31)
    at okhttp3.internal.Platform.trustRootIndex(Platform.java:97)
    at okhttp3.internal.Platform$Android.trustRootIndex(Platform.java:271)
    at okhttp3.OkHttpClient.<init>(OkHttpClient.java:189)
    at okhttp3.OkHttpClient.<init>(OkHttpClient.java:60)
    at okhttp3.OkHttpClient$Builder.build(OkHttpClient.java:718)

Activity

swankjesse

swankjesse commented on Feb 23, 2016

@swankjesse
Collaborator

Change your TrustAllManager to do this:


    @Override
    public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
    }
lizhangqu

lizhangqu commented on Feb 23, 2016

@lizhangqu
Author

@swankjesse thank you

zhenlimeng

zhenlimeng commented on Feb 4, 2017

@zhenlimeng

@swankjesse 谢谢 thank you

ewu-tarun

ewu-tarun commented on Jun 13, 2017

@ewu-tarun

@swankjesse it's working thanks a lot

ps993390891

ps993390891 commented on Jul 4, 2017

@ps993390891

javax.net.ssl.SSLHandshakeException: Handshake failed

ewu-tarun

ewu-tarun commented on Jul 4, 2017

@ewu-tarun

@ps993390891 you can add connection specification for handshake.

zqHero

zqHero commented on Jan 26, 2018

@zqHero

thank you haha

liang99312

liang99312 commented on Jan 29, 2018

@liang99312

thank you

levelh

levelh commented on Aug 13, 2019

@levelh

nice

zhanzengyu

zhanzengyu commented on Feb 29, 2020

@zhanzengyu

javax.net.ssl.SSLHandshakeException: Handshake failed

Has the problem been solved?

yangjunjin

yangjunjin commented on May 18, 2021

@yangjunjin

bug bug 崩溃

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @swankjesse@liang99312@lizhangqu@zhenlimeng@zqHero

        Issue actions

          sslSocketFactory NullPointException · Issue #2361 · square/okhttp