1、先上代码
private static final StringKEY_STORE_TYPE_BKS ="bks";//证书类型 固定值
private static final StringKEY_STORE_TYPE_P12 ="PKCS12";//证书类型 固定值
private static final StringKEY_STORE_CLIENT_PATH ="client.p12";//客户端要给服务器端认证的证书
private static final StringKEY_STORE_TRUST_PATH ="server.p12";//客户端验证服务器端的证书库
private static final StringKEY_STORE_PASSWORD ="123456"客户端证书密码
private static final StringKEY_STORE_TRUST_PASSWORD ="123456";//客户端证书库密码
/**
* 获取Https的证书
*
* @param context Activity(fragment)的上下文
* @return SSL的上下文对象
*/
private static SSLContextgetSSLContext(Context context) {
try {
// 服务器端需要验证的客户端证书
KeyStore keyStore = KeyStore.getInstance(KEY_STORE_TYPE_P12);
// 客户端信任的服务器端证书
KeyStore trustStore = KeyStore.getInstance(KEY_STORE_TYPE_BKS);
InputStream ksIn = context.getResources().getAssets().open(KEY_STORE_CLIENT_PATH);
InputStream tsIn = context.getResources().getAssets().open(KEY_STORE_TRUST_PATH);
try {
keyStore.load(ksIn, KEY_STORE_PASSWORD.toCharArray());
trustStore.load(tsIn, KEY_STORE_TRUST_PASSWORD.toCharArray());
}catch (Exception e) {
e.printStackTrace();
}finally {
try {
ksIn.close();
}catch (Exception ignore) {
}
try {
tsIn.close();
}catch (Exception ignore) {
}
}
SSLContext sslContext = SSLContext.getInstance("TLS");
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(trustStore);
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("X509");
keyManagerFactory.init(keyStore, KEY_STORE_PASSWORD.toCharArray());
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
return sslContext;
}catch (Exception e) {
BNLog.e("tag", e.getMessage(), e);
}
return null;
}
![](https://img.haomeiwen.com/i7343914/61b3cf440109b5a0.png)
![](https://img.haomeiwen.com/i7343914/e4e826278f5dcbff.png)
说明:
client.p12, 这是客户端证书
server.p12, 这是服务端证书
其余的代码就不解释了,都是固定的。
问题:android load BKS error: wrong version of key store
按照字面的意思是:安卓加载BKS错误:版本问题
首先,你必须知道BKS是什么,它是证书的一种类型。
而且,我们在debug中也可以轻松的找到问题出现的具体代码位置
![](https://img.haomeiwen.com/i7343914/b260f157862e0890.png)
综上,也就可以看出是服务端的证书库类型是非bks类型
接下来就简单了,类型不匹配,那就装换一下咯
我在这里用到了这个工具
![](https://img.haomeiwen.com/i7343914/f4b4c1ad56f682ce.png)
用法:
![](https://img.haomeiwen.com/i7343914/026e23a04982b828.png)
![](https://img.haomeiwen.com/i7343914/edd06336de09a126.png)
![](https://img.haomeiwen.com/i7343914/1a41f1d3fa5ec887.png)
![](https://img.haomeiwen.com/i7343914/7c79376f018b23e0.png)
注意事项
出现这个问题呢,是因为代码问题,请参照上文代码,可以直接复制
2、安卓系统版本兼容问题,我这里暂未考虑。
3、如有错误,请指出。
代码参照这位老板的:http://blog.csdn.net/u012874222/article/details/50339259
他写的十分详细,我这里只是简单的叙述一下。建议看一看。
咳咳,会不会侵权,哈哈,如有请指出。
网友评论