1. 程式人生 > >關於Okhttp3 https雙向驗證實現程式碼

關於Okhttp3 https雙向驗證實現程式碼

使用前提:

okhttp3

官網:http://square.github.io/okhttp/

可能不同的情況會出現不同的情況,所以只能說我的程式碼邏輯不是百分之百可以適應不同環境的app,僅僅提供一個參考

1)首先準備,客戶端證書,服務端證書

本程式碼使用的證書是:client.p12,trust.bks ,並將證書存放到res/raw資料夾下

2)書寫程式碼:

public class MySSLSocketFactory {

    private static final String KEY_STORE_TYPE_BKS = "bks";//證書型別
    private static final String KEY_STORE_TYPE_P12 = "PKCS12";//證書型別


    private static final String KEY_STORE_PASSWORD = "****";//證書密碼(應該是客戶端證書密碼)
    private static final String KEY_STORE_TRUST_PASSWORD = "***";//授信證書密碼(應該是服務端證書密碼)

    public static SSLSocketFactory getSocketFactory(Context context) {


        InputStream trust_input = context.getResources().openRawResource(R.raw.trust);//伺服器授信證書
        InputStream client_input = context.getResources().openRawResource(R.raw.client);//客戶端證書
        try {
                    SSLContext sslContext = SSLContext.getInstance("TLS"); 
                    KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
                    trustStore.load(trust_input, KEY_STORE_TRUST_PASSWORD.toCharArray()); 
                    KeyStore keyStore = KeyStore.getInstance(KEY_STORE_TYPE_P12);  
                    keyStore.load(client_input, KEY_STORE_PASSWORD.toCharArray());
                    TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
                    trustManagerFactory.init(trustStore);
 
                    KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
                   keyManagerFactory.init(keyStore, KEY_STORE_PASSWORD.toCharArray());
                   sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());
                   SSLSocketFactory factory = sslContext.getSocketFactory();
                   return factory;
               } catch (Exception e) {
                           e.printStackTrace(); 
                          return null;
               } finally { 
                          try {
                                trust_input.close(); 
                                client_input.close();
                          } catch (IOException e) { 
                               e.printStackTrace();  
                          } 
               }
}


3)okhttps呼叫
OkHttpClient mOkHttpClient 
     = new OkHttpClient.Builder().sslSocketFactory(MySSLSocketFactory.getSocketFactory(context)).build();
這樣就可以得到對應添加了Https協議的網路請求客戶端
4)同時,正常該程式碼也適合AsynHttpClient框架的https整合

順便打個廣告

騰訊視訊會員,搜狐會員賬號長期供貨,比官網價錢低,穩定不掉線,需要的可以加qq:1059876295

相關推薦

關於Okhttp3 https雙向驗證實現程式碼

使用前提: okhttp3 官網:http://square.github.io/okhttp/ 可能不同的情況會出現不同的情況,所以只能說我的程式碼邏輯不是百分之百可以適應不同環境的app,僅僅提供一個參考 1)首先準備,客戶端證書,服務端證書 本程式碼使用的證書是:

模擬RSA雙向驗證,並且實現DES加密以及MD5校驗過程(python程式碼實現

要求如下:            (1)A,B兩端各生成公鑰金鑰對(PA,SA), 金鑰對(PB,SB)。            (2)A端生成隨機數N1,用B的公鑰PB加

eclipse中使用Jetty外掛實現https請求與SSL雙向驗證

連結 完整程式原始碼下載,csdn還沒驗證通過 1. 包含https和socket兩種ssl測試程式碼 2. 所有密碼均為123456 環境準備 eclipse中安裝run-jetty-run外掛 csdn下載資源 java環境支援,需要使用keyt

輕鬆把玩HttpClient之配置ssl,採用繞過證書驗證實現https

上篇文章說道httpclient不能直接訪問https的資源,這次就來模擬一下環境,然後配置https測試一下。在前面的文章中,分享了一篇自己生成並在tomcat中配置ssl的文章《Tomcat配置SSL》,大家可以據此來在本地配置https。我已經配置好了,效果是這樣滴:

Android實現ssl雙向驗證

Android實現雙向驗證 前言 Android端實現雙向認證的難點主要在於Android接受的證書格式是BKS,而一般提供的證書不包含此格式,需要手動轉換 轉換之後如果請求不了,表現為握手失敗(Handshake failed),則一般是證書轉換錯誤

Android HTTPS SSL雙向驗證

一、HTTPS和HTTP的區別 1、https協議需要到ca申請證書,一般免費證書很少,需要交費。 2、http是超文字傳輸協議,資訊是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。 3、http和https使用的是完全不同的連線方式,用的埠也不一樣,前

在繞過證書驗證實現https訪問時 出現java.lang.NoClassDefFoundError: org/apache/http/conn/socket//PlainConnectionSock

# 歡迎使用Markdown編輯器寫部落格 本Markdown編輯器使用StackEdit修改而來,用它寫部落格,將會帶來全新的體驗哦: Markdown和擴充套件Markdown簡潔的語法 程式碼塊高亮 圖片連結和圖片上傳 LaTex數學公式 UML序列

Android 客戶端 okhttp3 與伺服器之間的雙向驗證

本篇是Android 客戶端基於okhttp3的網路框架 和後臺伺服器之間的雙向驗證 分為三個階段 一:簡單的後臺伺服器搭建 二:客戶端接入okhttp3,並進行的網路請求 三:伺服器和客戶端的雙向驗證 第一步:   搭建簡單的伺服器 1:下載tomcat 2:配置

JAX-RS RESTful webservice 服務端及客戶端實現(基於HTTPS雙向認證)

在ApacheCXF的Sample裡以及網上很多有關RESTful HTTPS雙向認證的文章介紹僅僅是理論,沒有涉及實際環境的實現(客戶端和服務端都是localhost);這幾天使用Apache的CXF以及 Apache portable HttpClient實現跨IP的J

使用libevhtp搭建HTTPS SERVER(雙向驗證身份)

本文主要介紹使用libevhtp搭建一個HTTPS SERVER的方法,非加密的HTTP SERVER搭建方法,請點選此處 (本文的構建環境繼承自該部落格)。本文將針對“雙向驗證身份”場景,介紹HTTPS SERVER的搭建方法。“單向驗證身份”的場景,請點選此處。1. 雙向

ASIHTTPRequest實現https雙向認證請求

 什麼是雙向認證呢?簡而言之,就是伺服器端對請求它的客戶端要進行身份驗證,客戶端對自己所請求的伺服器也會做身份驗證。服務端一旦驗證到請求自己的客戶端為不可信任的,服務端就拒絕繼續通訊。客戶端如果發現服務端為不可信任的,那麼也中止通訊。         雙向認證的演算法

php登入驗證程式碼實現 含資料庫設計 親測有效

深夜調程式碼 試過無數種方法終於見了成效 login.php內容如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-str

curl請求https禁止驗證證書(釘釘機器人php測試程式碼)

研究釘釘自定義機器人的php測試程式碼,一直返回false,查資料,發現curl請求https需要加上兩個引數(不驗證證書和hosts): curl_setopt($ch, CURLOPT_SSL

android https(SSL) 雙向驗證詳解

預備工具“bcprov-jdk16-141.jar”和“portecle.jar”將“bcprov-jdk16-141.jar”部署到jdk1.6.0_03\jre\lib\ext目錄下1:伺服器端的金鑰庫D:\a>keytool -genkey -alias

安卓使用Mob實現簡訊驗證登入程式碼 很簡單

註冊賬號 在 Mob 官網右上角點選註冊,依次填入資訊,其中公司一欄可以隨便填 新增應用 登入後,點選 SecurityCodeSDK - 立即使用,Mob 會提示你新增應用,名字自己填,再選 Android,新增完後再點選 SecurityCodeSDk - 進入,之後應該可以看到如下介面 AppKey

兩種驗證碼的實現程式碼

第一種是用Servlet實現驗證碼: 程式碼如下: public class CodeServlet extends HttpServlet {     private static final long serialVersionUID = 1L;          p

簡單的登錄權限驗證實現

prefix void 定向 exceptio clas 攔截 登錄 scrip oca 1.登錄 登錄時需要生成一個自定義的token,token的生成規則一般可以考慮混合多種因素,如userId+生成時間+UUID,再進行一定的編碼 String token=user

支付寶簽名驗證實現-Delphi版

string 研究 功能實現 png exce delphi 而且 push begin 支付寶簽名驗證實現-Delphi版 首先介結下支付寶簽名驗證流程: 一 支付寶密鑰生成 支付寶提供秘鑰生成工具https://docs.open.alipay.com/291/1

HTTPS雙向認證

recv failed https雙向認證 如果需要只支持https可參照 版本說明 httpclinet:4.3.1jdk:1.6tomcat:6 https雙向認證 參考文章 https://blog.csdn.net/zhongming_software/article/details/8592

keytool+tomcat配置HTTPS雙向證書認證

tomcat-7 exp html 保存 store 本地 -i window 目錄 系統需求: 1、 Windows系統或Linux系統 2、 安裝並配置JDK 1.6.0_13 3、 安裝並配置Tomcat 6.0 一、服務器證書 創建證書存儲目錄“D:\hom