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";//客戶端要給服務(wù)器端認(rèn)證的證書
private static final StringKEY_STORE_TRUST_PATH ="server.p12";//客戶端驗證服務(wù)器端的證書庫
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 {
// 服務(wù)器端需要驗證的客戶端證書
? ? ? ? KeyStore keyStore = KeyStore.getInstance(KEY_STORE_TYPE_P12);
? ? ? ? // 客戶端信任的服務(wù)器端證書
? ? ? ? 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;
}


說明:
client.p12, 這是客戶端證書
server.p12, 這是服務(wù)端證書
其余的代碼就不解釋了,都是固定的。
問題:android load BKS error: wrong version of key store
按照字面的意思是:安卓加載BKS錯誤:版本問題
首先,你必須知道BKS是什么,它是證書的一種類型。
而且,我們在debug中也可以輕松的找到問題出現(xiàn)的具體代碼位置

綜上,也就可以看出是服務(wù)端的證書庫類型是非bks類型
接下來就簡單了,類型不匹配,那就裝換一下咯
我在這里用到了這個工具

用法:




注意事項
出現(xiàn)這個問題呢,是因為代碼問題,請參照上文代碼,可以直接復(fù)制
2、安卓系統(tǒng)版本兼容問題,我這里暫未考慮。
3、如有錯誤,請指出。
代碼參照這位老板的:http://blog.csdn.net/u012874222/article/details/50339259
他寫的十分詳細(xì),我這里只是簡單的敘述一下。建議看一看。
咳咳,會不會侵權(quán),哈哈,如有請指出。