Retrofit 添加自定义证书 X509TrustManager

最近公司要在APP中废弃手动添加的证书文件,用后台返回的数据验证是否是后台的数据。然后一点都不懂的我只能求救百度和Google啦,然后发觉是非常简单的事情。废话不多说,先贴出代码

private static Retrofit getRetrofit(String url) {
        OkHttpClient okHttpClient = getOkhttpBuilder()
                .addInterceptor(new HttpInterceptor())
                .addInterceptor
                        (new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)).build();
        Retrofit retrofit = new Retrofit.Builder()
                .client(okHttpClient)
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        return retrofit;
    }

private static OkHttpClient.Builder getOkhttpBuilder() {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        try {
            builder.sslSocketFactory(getSSLSocketFactory());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return builder;

    }

/**
     * 添加自定义校验
     */
    public static SSLSocketFactory getSSLSocketFactory() throws Exception {
        // Install the all-trusting trust manager
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(null, new TrustManager[] { new MyHTTPSTrustManager() }
                , new SecureRandom());
        // Create an ssl socket factory with our all-trusting manager
        return sslContext
                .getSocketFactory();
    }

这里中的getRetrofit()方法是用来获取服务的,用过Retrofit的人都知道,具体不多说,这里不说吗Retrofit的使用。关键是最后一个方法的MyHTTPSTrustManager,这个是重写了X509TrustManager的一个类,主要重写的方法就是X509TrustManager类中的checkServerTrusted方法,看着方法就知道这个是验证服务器是否可信的方法。

 @Override
    public void checkServerTrusted(
            X509Certificate[] x509Certificates, String s)
            throws java.security.cert.CertificateException {
}
}

其中x509Certificates就是后台返回的规则字符串数据,这其中的规则验证就要靠你和后台商量啦。这个重写方法是Volley和Retrofit都一样的,意思就是如果你重写了一个X509TrustManager,那么假如你有一个APP用了Volley,一个APP用了Retrofit,这个重写的类是两边都可以通用的(假如后台的验证逻辑是一样的话)

转载于:https://my.oschina.net/u/3729396/blog/1601664

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值