Android下OkHttp请求自定义HTTPS证书接口设置

在请求安全性高的接口时,我们可能会使用到HTTPS接口,HTTPS可以理解为HTTP+TLS,关于HTTPS具体是怎么工作的,可以看这篇文章:http://gold.xitu.io/entry/56ef4ff47db2a20052218e0f
如果你的证书是向Android中内置默认信任的证书颁发机构申请的,则不需要通过此步骤(需要好多钱,但是大部分国内应用不会花那么多钱去买权威机构颁发的证书),如果不是,此步骤是在你的App网络请求中加入信任自定义的证书(第三方非权威证书颁发机构颁发的证书),让你的App信任此第三方非权威证书颁发机构。

try {
    //取得SSL的SSLContext实例,使用TLS协议
    SSLContext sslContext = SSLContext.getInstance("TLS");
    //取得KeyManagerFactory和TrustManagerFactory的X509密钥管理器实例
    KeyManagerFactory keyManager = KeyManagerFactory.getInstance("X509");
    TrustManagerFactory trustManager = TrustManagerFactory.getInstance("X509");
    //取得BKS密库实例
    KeyStore kks = KeyStore.getInstance("PKCS12");
    //Android支持BKS的KeyStore
    KeyStore tks = KeyStore.getInstance("BKS");
    //加客户端载证书和私钥,通过读取资源文件的方式读取密钥和信任证书

    //raw中为truststore.bks的信任密库
    tks.load(appCtx
                .getResources()
                .openRawResource(R.raw.truststore), CLIENT_TRUST_PASSWORD.toCharArray());

    //raw资源中的文件为client.p12格式的证书
    kks.load(appCtx
                .getResources()
                .openRawResource(R.raw.client), CLIENT_KET_PASSWORD.toCharArray());

    //初始化密钥管理器
    keyManager.init(kks, CLIENT_KET_PASSWORD.toCharArray());
            trustManager.init(tks);
    //初始化SSLContext
    sslContext.init(keyManager.getKeyManagers(),
            trustManager.getTrustManagers(), null);

    mOkHttpClient = OkHttpUtils.getInstance().getOkHttpClient();
    mOkHttpClient.setSslSocketFactory(sslContext.getSocketFactory());

} catch (Exception e) {
    Log.e(TAG, "init https proxy failed!");
    throw new RuntimeException("init https proxy failed!");
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值