记录一次安卓双向认证

刚开始使用 openssl 生成证书给客户端用时,某些版本的手机提示 verify chain faild,

找不到原因、随放弃

后来发现除了openssl还有keytool

于是参考了以下三篇文章

生成交换证书

转keystore到pfx

通过pkf和cer导出key,pem文件

1.生成客户端keystore

keytool -genkeypair -alias client -keyalg RSA -validity 3650 -keypass 123456 -storepass 123456 -keystore client.jks

2.生成服务端keystore

keytool -genkeypair -alias server -keyalg RSA -validity 3650 -keypass 123456 -storepass 123456 -keystore server.keystore
//注意:CN必须与IP地址匹配,否则需要修改host

3.导出客户端证书

keytool -export -alias client -file client.cer -keystore client.jks -storepass 123456 

4.导出服务端证书

keytool -export -alias server -file server.cer -keystore server.keystore -storepass 123456 

5.重点:证书交换

将客户端证书导入服务端keystore中,再将服务端证书导入客户端keystore中, 一个keystore可以导入多个证书,生成证书列表。
生成客户端信任证书库(由服务端证书生成的证书库):
    keytool -import -v -alias server -file server.cer -keystore truststore.jks -storepass 123456 
将客户端证书导入到服务器证书库(使得服务器信任客户端证书):
    keytool -import -v -alias client -file client.cer -keystore server.keystore -storepass 123456 

6.生成Android识别的BKS库文件

用Portecle工具转成bks格式,最新版本是1.10。
下载链接:https://sourceforge.net/projects/portecle/
运行protecle.jar将client.jks和truststore.jks分别转换成client.bks和truststore.bks,然后放到android客户端的assert目录下
 
>File -> open Keystore File -> 选择证书库文件 -> 输入密码 -> Tools -> change keystore type -> BKS -> save keystore as -> 保存即可
 
这个操作很简单,如果不懂可自行百度。
 
我在Windows下生成BKS的时候会报错失败,后来我换到CentOS用OpenJDK1.7立马成功了,如果在这步失败的同学可以换到Linux或Mac下操作,
将生成的BKS拷贝回Windows即可。
原文地址:https://www.cnblogs.com/lisq/p/10154647.html