android https遇到自我簽署憑證/信任認證

來源:互聯網
上載者:User

標籤:chrome瀏覽器   verify   cap   put   androi   NPU   UI   BMI   ogr   

對於CA機構頒發的認證Okhttp預設支援 可以直接存取
但是對於自訂的認證就不可以了(如:https ://kyfw.12306.cn/otn/), 需要加入Trust
下面分兩部分來寫,一是信任所有認證,二是信任指定認證,訪問自簽名的網站

一、信任所有認證

1. 在你的module 下 build.gradule裡添加

dependencies {、、、compile ‘com.zhy:okhttputils:2.6.2‘、、、}

2.建立MyApplication

public class MyApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        // 這就是信任所有認證        HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null,null, null);        OkHttpClient okHttpClient = new OkHttpClient.Builder()                    .connectTimeout(10000L, TimeUnit.MILLISECONDS)                    .readTimeout(10000L, TimeUnit.MILLISECONDS)                    .addInterceptor(new LoggerInterceptor("TAG"))                    .hostnameVerifier(new HostnameVerifier() {                        @Override                        public boolean verify(String hostname, SSLSession session) {                            return true;                        }                    })                    .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)                    .build();            OkHttpUtils.initClient(okHttpClient);        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }

3.AndroidMainfest.xml

//添加許可權 <uses-permission android:name="android.permission.INTERNET"></uses-permission>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>    <application        //將建立的MyApplication name添加進來        android:name=".MyApplication"        .....

4.然後在需要請求網路的地方

public void getHttps(View view) {        String url = "https://kyfw.12306.cn/otn/";        OkHttpUtils                .get()                .url(url)                .build()                .execute(new StringCallback() {                    @Override                    public void onError(Call call, Exception e, int id) {                        Log.e("TAG", "onError: " + e.toString());                    }                    @Override                    public void onResponse(String response, int id) {                        Log.e("TAG", "onResponse: " + response.toString());                    }                });    }
二、自訂的認證 自簽名網站

分兩種:1.直接使用網站認證;2.將認證轉為字串

1、直接使用網站認證####

1.匯出網站認證
-- chrome瀏覽器方法:(其他瀏覽器請百度)
--訪問 https://kyfw.12306.cn/otn/
按F12
--

 
-- 詳細資料--複製到檔案--下一步
-- 選
  --下一步
--選擇儲存位置 填入檔案名稱
 
--下一步 --完成--確定
2、將匯出的認證 放在assets檔案夾下,沒有就自己建立一個
 
//使用  在Application裡 HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(new InputStream[]{getAssets().open("srca.cer")}, null, null);

==========
也可以不用認證 直接將認證轉為字串 ,使用字串

2、將認證轉為字串####

兩種方式任選一種 直接使用認證 就不用這一步了
代碼 http://download.csdn.net/download/eryhytkmgfhnghnjfghn/9834086

1.在你的module 下 build.gradule裡添加

dependencies {、、、compile ‘com.zhy:okhttputils:2.6.2‘、、、}

2.建立MyApplication

public class MyApplication extends Application {          //擷取12306網站認證,將認證中的內容提取出來,寫成字串常量//不會提取內容 請百度//我的在asli是可以直接看到內容的            private String CER_12306 = "-----BEGIN CERTIFICATE-----\n" +            "MIICmjCCAgOgAwIBAgIIbyZr5/jKH6QwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ04xKTAn\n" +            "BgNVBAoTIFNpbm9yYWlsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRTUkNBMB4X\n" +            "DTA5MDUyNTA2NTYwMFoXDTI5MDUyMDA2NTYwMFowRzELMAkGA1UEBhMCQ04xKTAnBgNVBAoTIFNp\n" +            "bm9yYWlsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRTUkNBMIGfMA0GCSqGSIb3\n" +            "DQEBAQUAA4GNADCBiQKBgQDMpbNeb34p0GvLkZ6t72/OOba4mX2K/eZRWFfnuk8e5jKDH+9BgCb2\n" +            "9bSotqPqTbxXWPxIOz8EjyUO3bfR5pQ8ovNTOlks2rS5BdMhoi4sUjCKi5ELiqtyww/XgY5iFqv6\n" +            "D4Pw9QvOUcdRVSbPWo1DwMmH75It6pk/rARIFHEjWwIDAQABo4GOMIGLMB8GA1UdIwQYMBaAFHle\n" +            "tne34lKDQ+3HUYhMY4UsAENYMAwGA1UdEwQFMAMBAf8wLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDov\n" +            "LzE5Mi4xNjguOS4xNDkvY3JsMS5jcmwwCwYDVR0PBAQDAgH+MB0GA1UdDgQWBBR5XrZ3t+JSg0Pt\n" +            "x1GITGOFLABDWDANBgkqhkiG9w0BAQUFAAOBgQDGrAm2U/of1LbOnG2bnnQtgcVaBXiVJF8LKPaV\n" +            "23XQ96HU8xfgSZMJS6U00WHAI7zp0q208RSUft9wDq9ee///VOhzR6Tebg9QfyPSohkBrhXQenvQ\n" +            "og555S+C3eJAAVeNCTeMS3N/M5hzBRJAoffn3qoYdAO1Q8bTguOi+2849A==\n" +            "-----END CERTIFICATE-----";    @Override    public void onCreate() {        super.onCreate();        // 這就是信任所有認證   **和 一 的區別在這裡**        //這裡  import okio.Buffer;           HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(new InputStream[]{new Buffer().writeUtf8(CER_12306).inputStream()},null, null);        OkHttpClient okHttpClient = new OkHttpClient.Builder()                    .connectTimeout(10000L, TimeUnit.MILLISECONDS)                    .readTimeout(10000L, TimeUnit.MILLISECONDS)                    .addInterceptor(new LoggerInterceptor("TAG"))                    .hostnameVerifier(new HostnameVerifier() {                        @Override                        public boolean verify(String hostname, SSLSession session) {                            return true;                        }                    })                    .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)                    .build();            OkHttpUtils.initClient(okHttpClient);        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }

然後同一的34

 

代碼 https://github.com/DeadLine837/TestHttps

參考 https://github.com/hongyangAndroid/okhttputils

  

android https遇到自我簽署憑證/信任認證

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.