OkHttpClient okHttpClient = new OkHttpClient.Builder()
.sslSocketFactory(SSLHelper.getSSLCertifcation(context))//为OkHttp对象设置SocketFactory用于双向认证
.hostnameVerifier(new UnSafeHostnameVerifier())
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(“https://10.2.8.56:8443”)
.addConverterFactory(GsonConverterFactory.create())//添加 json 转换器
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//添加 RxJava 适配器
.client(okHttpClient)//添加OkHttp代理对象
.build();
首先对于双向证书验证,也就是说,
客户端持有服务端的公钥证书,并持有自己的私钥,服务端持有客户的公钥证书,并持有自己私钥,
建立连接的时候,客户端利用服务端的公钥证书来验证服务器是否上是目标服务器;服务端利用客户端的公钥来验证客户端是否是目标客户端。(请参考RSA非对称加密以及HASH校验算法)
服务端给客户端发送数据时,需要将服务端的证书发给客户端验证,验证通过才运行发送数据,同样,客户端请求服务器数据时,也需要将自己的证书发给服务端验证,通过才允许执行请求。
下面我画了一个图,来帮助大家来理解双向认证的过程,证书生成流程,以及各个文件的作用,大家可以对照具体步骤来看
相关格式说明
***JKS:***数字证书库。JKS里有KeyEntry和CertEntry,在库里的每个Entry都是靠别名(alias)来识别的。
P12:是PKCS12的缩写。同样是一个存储私钥的证书库__,由.jks**文件导出的,用户在PC平台安装,用于标示用户的身份。
***CER:***俗称数字证书,目的就是用于存储公钥证书,任何人都可以获取这个文件 。
BKS:由于Android平台不识别.keystore__和.jks**格式的证书库文件,因此Android平台引入一种的证书库格式,BKS。