关于使用OKHttp调试自签名证书进行双向认证的一些看法

注1:调试过程如果客户端和服务端都不熟悉的话最好由一个人完成
注2:本文只是对以下链接内容的完善及其解释
注3:本文是基于OKHttp上进行的代码调试
注4:本文是自签名证书,属于测试代码,并没有在正式环境上使用
注5:建议读者仔细尝试过相关链接后再进行阅读本文
注6:可能会使用到startup.bat命令启动tomcat

相关链接:
《基于Java的https双向认证,android上亦可用》
http://blog.csdn.net/lmj623565791/article/details/48129405
《Android Https相关完全解析 当Okhttp遇上Https》
https://my.oschina.net/jjface/blog/339144

第一步:搭建服务器,服务器搭建仅仅需要一个tomcat ,配置很简单,可以百度一下

第二步:通过《基于Java的https双向认证,android上亦可用》一文中的命令行进行证书生成,无需更改命令,最终生成的证书有client.cer,client.p12,client.truststore,server.cer,server.keystore这五个文件。

第三步:参考《Android Https相关完全解析 当Okhttp遇上Https》一文中的方式下载portecle-1.9.zip文件并解压,然后点击portecle.jar文件,打开GUI界面,然后通过《Android Https相关完全解析 当Okhttp遇上Https》一文中的操作方式将client.p12转换成client.bks文件

第四步:将server.cer和client.bks复制进Android项目的assets文件夹下,参考如下代码即可进行修改
(以下代码参考https://github.com/hongyangAndroid/okhttputils ):

InputStream server = null;
InputStream client = null;
try {
    server = getAssets().open("server.cer");
    client = getAssets().open("client.bks");
}catch (IOException e){
    e.printStackTrace();
}
//设置可访问所有的https网站
HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(new InputStream[]{server}, client, "123456");
OkHttpClient okHttpClient =  new OkHttpClient.Builder().
        sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
        .hostnameVerifier(new UnSafeHostnameVerifier())
        //其他配置
        .build();
OkHttpUtils.initClient(okHttpClient);
}
public class UnSafeHostnameVerifier implements 
HostnameVerifier{
@Override
public boolean verify(String hostname, SSLSession session)
{
    HostnameVerifier hv =  HttpsURLConnection.getDefaultHostnameVerifier();
    return hv.verify("www.itjoyee.com", session);
}
}

第五步:启动或重新启动服务器(tomact),启动成功后,运行Android程序,顺利的话就可以看到tomact的首页源码或者自己设置的成功标志

附:以下是可能出现的异常
1、
该异常出现的原因是该使用server.cer的地方使用错误,导致出现这个错误。如,证书和服务器所使用的证书不一致。如,使用的是其他文件,不是server.cer,总之证书不正确导致的该错误

2、
该异常出现的原因是没有对证书进行验证或者是验证了错误域名,如出现此种错误请仔细阅读第五步操作

3、
异常信息
可能会因为bcprov-jdk16-146.jar文件导致Android项目构建失败,删除即可。当重新生成证书的时候再把该文件复制到原有的位置,然后生成证书,重启tomcat等流程

4、
如果出现其他错误请仔细阅读文档或留言

你可能感兴趣的:(Android,Android,OKHttp,双向认证)