Android使用Https

OkHttp使用Https(OkHttp版本3.8.1)

一、使用(4步搞定)

1.初始化OkHttpClient時設(shè)置sslSocketFactory,需要兩個參數(shù)。設(shè)置后即可訪問https

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

builder.sslSocketFactory(getSSLSocketFactory(), getTrustManager());

2.獲取信任庫getTrustManager()

// 獲取證書庫

KeyStore keystore = getKeyStore();

// 初始化信任庫工廠

TrustManagerFactory trustManagerFactory;

trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

trustManagerFactory.init(keystore);

// 獲取信任庫

TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();

if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {

throw new IllegalStateException("Unexpected default trust managers:" + Arrays.toString(trustManagers));

}

X509TrustManager trustManager = (X509TrustManager) trustManagers[0];

3.獲取證書庫getKeyStore()

private static KeyStore getKeyStore() throws Exception {

// 初始化證書

CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");

InputStream inputStream = App.instance.getAssets().open("client.cer");// 這里導(dǎo)入SSL證書文件

Certificate cer = certificateFactory.generateCertificate(inputStream);

inputStream.close();

// 初始化證書庫,給證書庫設(shè)置證書

KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());

keystore.load(null, null); // 雙向驗證時使用

keystore.setCertificateEntry("trust", cer);

return keystore;

}

}

4.getSSLSocketFactory()

private static SSLSocketFactory getSSLSocketFactory() {

try {

// 獲取信任庫

X509TrustManager trustManager = getTrustManager();

// 初始化SSL上下文

SSLContext sslContext = SSLContext.getInstance("TLS");

sslContext.init(null, new TrustManager[] { trustManager }, null);

SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

return sslSocketFactory;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}


二、證書文件放在assets目錄下。



三、證書有自簽名證書和正式證書。自簽名證書是服務(wù)器的人用本地服務(wù)器的根證書自簽名的,證書驗證時會出現(xiàn)失敗。正式證書需要購買

1、使用自簽名證書時,要忽略證書驗證,即信任所有的證書。設(shè)置hostnameVerifier,重寫verify方法,返回true,即信任所有證書。默認(rèn)的hHostnameVerifier對象,會驗證證書

builder.hostnameVerifier(new HostnameVerifier() {

@Override

public boolean verify(String hostname, SSLSession session) {

return true;

}

});

2、正式證書的環(huán)境,根據(jù)服務(wù)器需求,可以只改url為https,不為設(shè)置sslSocketFactory,即可訪問服務(wù)器


查看源碼如何使用sslSocketFactory

/**源碼,有demo代碼*/

public Builder sslSocketFactory(

SSLSocketFactory sslSocketFactory, X509TrustManager trustManager) {...}


在訪問服務(wù)器成功后,獲取response中的header,傳入鍵值,即可獲取響應(yīng)頭。需要全局保存這個header,再之后的每次網(wǎng)絡(luò)請求時都要添加header

Response response = call.execute();

response.header("app_token");//app_toekn響應(yīng)頭的鍵值



Xutils3使用Https

一、使用

1.new請求參數(shù),設(shè)置SslSocketFactory,一個參數(shù)。設(shè)置后即可訪問https

RequestParams params = new RequestParams(url);

params.setSslSocketFactory(sslContext.getSocketFactory());

2.獲取sslContext


HttpsUrlConnection使用Https

參考:www.itdecent.cn/p/2f6ace079568

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容