美文网首页
Android 忽略https证书

Android 忽略https证书

作者: leixiaowen | 来源:发表于2023-04-25 14:40 被阅读0次

一、HttpUrlConnection/HttpsUrlConnection

添加以下类,直接调用HTTPSTrustManager.allowAllSSL()

还一种方式是创建HttpURLConnection对象之后,直接设置urlConnection.setSSLSocketFactory和urlConnection.setHostnameVerifier

注意:

1)allowAllSSL()需要在openConnection()之前调用;

2)由于HttpUrlConnection是HttpsUrlConnection的父类,HTTPSTrustManager.allowAllSSL()适用于两种方式。

package com.hzsun.handpos.utils;

import java.security.SecureRandom;

import java.security.cert.X509Certificate;

import javax.net.ssl.HostnameVerifier;

import javax.net.ssl.HttpsURLConnection;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLSession;

import javax.net.ssl.TrustManager;

import javax.net.ssl.X509TrustManager;

public class HTTPSTrustManagerimplements X509TrustManager {

private static TrustManager[]trustManagers;

    private static final X509Certificate[]_AcceptedIssuers =new X509Certificate[]{};

    @Override

    public void checkClientTrusted (

X509Certificate[] x509Certificates, String s)

throws java.security.cert.CertificateException {

// To change body of implemented methods use File | Settings | File

// Templates.

    }

@Override

    public void checkServerTrusted(

X509Certificate[] x509Certificates, String s)

throws java.security.cert.CertificateException {

// To change body of implemented methods use File | Settings | File

// Templates.

    }

@Override

    public X509Certificate[]getAcceptedIssuers() {

return _AcceptedIssuers;

    }

public static void allowAllSSL() {

HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {

@Override

            public boolean verify(String arg0, SSLSession arg1) {

// TODO Auto-generated method stub

                return true;

            }

});

        SSLContext context =null;

        if (trustManagers ==null) {

trustManagers =new TrustManager[] {new HTTPSTrustManager() };

        }

try {

context = SSLContext.getInstance("SSL");

            context.init(null, trustManagers, new SecureRandom());

        }catch (Exception e) {

e.printStackTrace();

        }

javax.net.ssl.SSLSocketFactory socketFactory =context.getSocketFactory();

        HttpsURLConnection.setDefaultSSLSocketFactory(socketFactory);

    }

}

二、OkHttp(由于Retrofit基于OkHttp,获取HttpClient之后设置方法同理)

通过以下方法创建OkHttpClient 对象

private static OkHttpClientgetUnsafeOkHttpClient() {

try {

// Create a trust manager that does not validate certificate chains

        final TrustManager[] trustAllCerts =new TrustManager[]{

new X509TrustManager() {

@Override

                    public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType){

}

@Override

                    public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {

}

@Override

                    public java.security.cert.X509Certificate[]getAcceptedIssuers() {

return new java.security.cert.X509Certificate[]{};

                    }

}

};

        // Install the all-trusting trust manager

        final SSLContext sslContext = SSLContext.getInstance("SSL");

        sslContext.init(null, trustAllCerts, new java.security.SecureRandom());

        // Create an ssl socket factory with our all-trusting manager

        final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

        OkHttpClient.Builder builder =new OkHttpClient.Builder();

        builder.sslSocketFactory(sslSocketFactory);

        builder.hostnameVerifier(new HostnameVerifier() {

@Override

            public boolean verify(String hostname, SSLSession session) {

return true;

            }

});

        OkHttpClient okHttpClient = builder.build();

        return okHttpClient;

    }catch (Exception e) {

throw new RuntimeException(e);

    }

}

相关文章

网友评论

      本文标题:Android 忽略https证书

      本文链接:https://www.haomeiwen.com/subject/pexmjdtx.html