2012-06-11 2 views
0

я генерация хранилища ключей из сертификата следующим образом:Android и исключение по внедрению собственного магазина пользовательских ключей

export CLASSPATH=/Developer/BouncyCastle/bcprov-jdk16-146.jar 
CERTSTORE=~/bitbucket/Android/CoooriJED/res/raw/mykeystore.bks 
if [ -a $CERTSTORE ]; then 
     rm $CERTSTORE || exit 1 
fi 
keytool \ 
     -importcert \ 
     -v \ 
     -trustcacerts \ 
     -alias 0 \ 
     -file <(openssl x509 -in mycert.pem) \ 
     -keystore $CERTSTORE \ 
     -storetype BKS \ 
     -provider org.bouncycastle.jce.provider.BouncyCastleProvider \ 
     -providerpath /Developer/BouncyCastle/bcprov-jdk16-146.jar \ 
     -storepass password 

Это создает хранилище ключей без видимых проблем. В Eclipse я очищаю свой проект Android и вижу «mykeystore.bks» в исходной папке. Загружаю хранилище ключей следующим образом:

private KeyStore keyStore() 
{ 
    try { 
     KeyStore trusted = KeyStore.getInstance("BKS"); 
     InputStream in = context.getResources().openRawResource(R.raw.mykeystore); 
     try { 
      trusted.load(in, "password".toCharArray()); // *Throws an exception* 
     } finally { 
     in.close(); 
     } 
     return trusted; 
    } catch (Exception e) { 
     throw new AssertionError(e); 
    } 
} 

я называю этот метод следующим образом (я удалил обработку исключений, чтобы сделать его легче читать здесь):

HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); 
KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509"); 
kmf.init(keyStore(), "password".toCharArray()); 

Однако линия trusted.load(in, "password".toCharArray()) вызывает «Неверную версию хранилища ключей» IOException. Почему это?

Благодарим вас заранее.

+0

Можете ли вы перечислить содержимое содержимое файла с Keytool? Правильно ли пароль? Какую версию Android вы тестируете? BTW, если он содержит только сертификаты, вам не нужны вызовы KeyManagerFactory и т. Д. Это частные ключи. –

+0

Android 2.1, 2.3 и 4.0. Пароль правильный. – SK9

+0

Так читается ли файл на вашей машине разработки? –

ответ