2012-02-16 54 views
14

我正嘗試使用由服務器團隊提供的密鑰存儲庫連接到服務器。Android是否支持.jks密鑰庫類型?

雖然發送服務請求到服務器首先我創建密鑰庫實例使用下面的API

KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 

它返回倉庫類型爲「BKS」。

Keystore服務器組發送的類型是「.jks」(somename.jks)因此,我收到了「密鑰存儲區的錯誤版本」異常。

我試圖通過傳遞密鑰庫的「JKS」來的getInstance()通過以下方式

KeyStore keystore = KeyStore.getInstance("JKS");  

但是在這裏我得到異常「密鑰庫JKS實施未找到」。

下面是一段代碼:

KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); 

InputStream instream = mContext.getAssets().open("somename.jks"); 

try { 
    trustStore.load(instream, "password".toCharArray()); 
} finally { 
    try { 
     instream.close(); 
    } catch(Exception ignore) { 
    } 
} 

請指引我解決這個問題。

+0

「JKS」似乎是默認。如果此KeyStore的類型爲「jks」,則必須將密鑰編碼爲符合PKS#8標準的EncryptedPrivateKeyInfo。取自http://developer.android.com/reference/java/security/KeyStore.html#getType()和http://developer.android.com/reference/javax/crypto/EncryptedPrivateKeyInfo.html – 2012-02-16 13:37:41

回答

23

我認爲Android支持「只有」 BouncyCastle的的KeyStore(被稱爲BKS)... 你仍然可以使用Portecle

將其從JKS轉換爲BKS,應該像一個魅力(至少它工作了想我的時候,我.CRT存儲到BKS格式)

「僅僅」的意思,在這裏很容易:p,否則你就必須操縱的東西

+1

Yup,JKS是一種太陽/甲骨文專有格式,我想谷歌不會覺得更輕浮些官司。 – Jens 2012-02-16 14:17:41

+0

@傑姆你說的是正確的,android只支持BKS。我從服務器團隊那裏獲得了BKS密鑰庫,它的工作原理與使用同一段代碼的魅力一樣。 – sankar 2012-02-20 13:16:15

+0

是的,似乎android不支持JKS ..也KeyStore.getDefaultType();返回「BKS」 – 2014-07-02 14:06:31

相關問題