设为首页 加入收藏

TOP

Https系列之四:https的SSL证书在Android端基于okhttp,Retrofit的使用(二)
2017-10-13 10:36:55 】 浏览:7970
Tags:Https 系列 https SSL 证书 Android 基于 okhttp Retrofit 使用
anagerFactory = 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)); } return (X509TrustManager) trustManagers[0]; } public void setTrustrCertificates(InputStream in) { mTrustrCertificate=in; } public InputStream getTrustrCertificates() { return mTrustrCertificate; } public OkHttpClient build() { OkHttpClient okHttpClient=null; if(getTrustrCertificates()!=null) { X509TrustManager trustManager; SSLSocketFactory sslSocketFactory; try { trustManager = trustManagerForCertificates(getTrustrCertificates()); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[] { trustManager }, null); sslSocketFactory = sslContext.getSocketFactory(); } catch (GeneralSecurityException e) { throw new RuntimeException(e); } okHttpClient=new OkHttpClient.Builder() .sslSocketFactory(sslSocketFactory, trustManager) .build(); } else { okHttpClient=new OkHttpClient.Builder() .build(); } return okHttpClient; } }

代码解释

代码不少,其实最核心的代码为:

public OkHttpClient build()
{
.......
 trustManager = trustManagerForCertificates(getTrustrCertificates());
 .......
  okHttpClient=new OkHttpClient.Builder()
                    .sslSocketFactory(sslSocketFactory, trustManager)
                    .build();
 ..........
 return okHttpClient;
}

也就是通过

void setTrustrCertificates(InputStream in)

把自己的证书对应的文件set进去

然后通过

trustManager =trustManagerForCertificates(getTrustrCertificates());

okHttpClient=new OkHttpClient.Builder()
                    .sslSocketFactory(sslSocketFactory, trustManager)
                    .build();

就能生成安装好了可信任证书的okHttpClient

OkhttpManager说完了,接下来,就是:

Activity中使用OkhttpManager

1:先把公钥证书文件(如:自签名的mycer.cer或CA证书的:*.pem)放到assets下,
如果使用AndroidStudio的同学,可能没有assets文件夹,自己建此文件夹,如我的为:app\src\main\assets

2:直接贴Activity主要的代码:

public class MyActivity extends AppCompatActivity {
@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       try {
            OkhttpManager.getInstance().setTrustrCertificates(getAssets().open("mycer.cer");
            OkHttpClient mOkhttpClient= OkhttpManager.getInstance().build();
        } catch (IOException e) {
            e.printStackTrace();
        }
}

简单吧,主要代码就那两句,就生成了已安装公钥证书”mycer.cer”的mOkhttpClient
接下来的mOkhttpClient怎样使用,大家都应该清楚了吧,如果不清楚只能看OkHttpClient的基础内容了

好了,OkHttpClient搞掂了

接下来就到Retrofit了

大家应该知到Retrofit默认是以OkHttpClient来作为传输的,既然OkHttpClient搞掂了,那Retrofit就简单了
还是直接贴代码:

 Retrofit retrofit = new Retrofit.Builder()
                .client(mOkhttpClient)
                .baseUrl("your_serverl_url")
                .build();

看,只需在Retrofit中多加一句

.client(mOkhttpClient)

就把已安装了证书的mOkhttpClient作为Retrofit的传输了


更多内容,请关注微信公众号:颜家大少
这里写图片描述

?
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android下获取FPS的几种方法 下一篇Android通过Chrome Inspect调试We..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目