2012-02-16 48 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

相关问题