最近公司要在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,这个重写的类是两边都可以通用的(假如后台的验证逻辑是一样的话)