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";//客戶端驗(yàn)證服務(wù)器端的證書庫
private static final StringKEY_STORE_PASSWORD ="123456"客戶端證書密碼
private static final StringKEY_STORE_TRUST_PASSWORD ="123456";//客戶端證書庫密碼
/**
* 獲取Https的證書
*
* @param context Activity(fragment)的上下文
* @return SSL的上下文對(duì)象
*/
private static SSLContextgetSSLContext(Context context) {
try {
// 服務(wù)器端需要驗(yàn)證的客戶端證書
? ? ? ? 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錯(cuò)誤:版本問題
首先督函,你必須知道BKS是什么隧土,它是證書的一種類型行楞。
而且鹿榜,我們?cè)赿ebug中也可以輕松的找到問題出現(xiàn)的具體代碼位置
綜上海雪,也就可以看出是服務(wù)端的證書庫類型是非bks類型
接下來就簡單了,類型不匹配舱殿,那就裝換一下咯
我在這里用到了這個(gè)工具
用法:
注意事項(xiàng)
出現(xiàn)這個(gè)問題呢,是因?yàn)榇a問題沪袭,請(qǐng)參照上文代碼湾宙,可以直接復(fù)制
2、安卓系統(tǒng)版本兼容問題,我這里暫未考慮侠鳄。
3埠啃、如有錯(cuò)誤,請(qǐng)指出伟恶。
代碼參照這位老板的:http://blog.csdn.net/u012874222/article/details/50339259
他寫的十分詳細(xì)碴开,我這里只是簡單的敘述一下。建議看一看博秫。
咳咳叹螟,會(huì)不會(huì)侵權(quán),哈哈台盯,如有請(qǐng)指出罢绽。