Android采用https进行双向认证

看到过网上很多关于Android+https采用双向认证的例子,但是后台用的Tomcat。这篇文章主要介绍下,Android+IIS的搭配方案。

Andorid采用的是Okhttp+RxJava+Retrofit框架,跟服务器进行双向认证。服务器采用自签名证书。

说下思路:

1制作证书。

先制作自己的签名机构CA,将该签名机构导入到服务器的受信任的证书里面。然后在这个CA下面,制作两张证书,一张是服务器端证书,一张是客户端证书。具体的做法参照:https://www.joji.me/zh-cn/blog/how-to-create-an-iis-website-that-requires-client-certificate-using-self-signed-certificates。注意的几点是:1拷贝到客户端的客户端证书,一定是放到当前用户下面,而不是本地计算机。2第四部,9小步之后的操作并没有做,但是不影响可以正常的双向验证。3当在服务器端开启《客户端的证书为必须》的选项之后,客户端的浏览器需要重启才能看到效果。实际上,证书的变更,只有重启浏览器才能看到。4如果当服务器端开启《客户端的证书为必须》的选项之后,你在客户端依然能够打开服务器端,而不是403,那么恭喜你,证书是没有问题了。5在制作证书的时候,里面的时间可以设置的长一点,也要修改demo指令行里面的password1。

2Android端代码

把根证书的公钥和服务器的公钥一起导入到信任列表中,指令如下

keytool -import -v -alias myCA -file CARoot.cer -keystore truststore.jks -storepass password

keytool -import -v -alias myServer -file ServerCert.cer -keystore truststore.jks -storepass password

通过一个portecle工具,把上面的truststore.jks文件转成bks文件。把服务器端生成的客户端的pfx文件也拷贝到客户机,也通过该工具生成bks文件,之后放到Android路径下面的Assets文件夹下面。之后的代码参考:

https://www.jianshu.com/p/64172ccfb73b

你可能感兴趣的:(Android采用https进行双向认证)