最近公司项目要求APP客户端与服务端通讯时经过https协议,但是初次搭的https环境没有安全的数字证书,是JDK生成的证书,APP访问过程中遇到了一些问题。
报了一个这样的错
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
百度了一下是数字证书的问题,但是我的客户端请求框架是OkHttp
原先用的是
'com.ansen.http:okhttpencapsulation:1.0.1'
这个框架去做请求以及下载文件的
主要用到的类HTTPCaller.java的源码当中,可以看到它对OkHttp的使用
/**
* 设置配置信息 这个方法必需要调用一次
* @param httpConfig
*/
public void setHttpConfig(HttpConfig httpConfig) {
this.httpConfig = httpConfig;
client = new OkHttpClient.Builder()
.connectTimeout(httpConfig.getConnectTimeout(), TimeUnit.SECONDS)
.writeTimeout(httpConfig.getWriteTimeout(), TimeUnit.SECONDS)
.readTimeout(httpConfig.getReadTimeout(), TimeUnit.SECONDS)
.build();
gson = new Gson();
requestHandleMap = Collections.synchronizedMap(new WeakHashMap<String, Call>());
cacheControl =new CacheControl.Builder().noStore().noCache().build();//不使用缓存
}
通过HttpConfig类去设置配置信息,然后好像没法直接屏蔽验证数字证书
最后我决定直接用OkHttp,使用方法参考了一下两篇文章~
https://www.cnblogs.com/maomishen/p/5403301.html
https://www.jb51.net/article/117675.htm
工具类OkHttpUtil.java
package com.gotop.sanqinapp.util;
import java.io.IOException;
import java.lang.reflect.Field;
import java.security.SecureRandom;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.