Android: открытие хранилища ключей в качестве ресурса для создания SSLSocketFactory - PullRequest
4 голосов
/ 23 февраля 2011


У меня есть хранилище ключей Bouncy Castle, которое я хотел бы использовать для подключения к SSLSocketFactory. Делать это в «настольной» Java легко, но как вы это делаете на андроиде.

Похоже, не имеет большого значения, вкладываете ли вы ресурсы или res / raw - проблема возникает при попытке открыть его и создать экземпляр KeyStore (в данном случае java.security.KeyStore) для передачи Конструктор SSLSocketFactorys.

Кто-нибудь имел успех с этим раньше? Какой лучший способ «прочитать» это и открыть его? Любые указатели или фрагменты кода будут приветствоваться.

Большое спасибо
Дон

1 Ответ

2 голосов
/ 14 июня 2011

Это должно сделать:

import android.content.Context;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.SingleClientConnManager;

import java.io.InputStream;
import java.security.KeyStore;

public class MyHttpClient extends DefaultHttpClient {

  final Context context;

  public MyHttpClient(Context context) {
    this.context = context;
  }

  @Override protected ClientConnectionManager createClientConnectionManager() {
    SchemeRegistry registry = new SchemeRegistry();
    registry.register(
        new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    registry.register(new Scheme("https", newSslSocketFactory(), 443));
    return new SingleClientConnManager(getParams(), registry);
  }

  private SSLSocketFactory newSslSocketFactory() {
    try {
      KeyStore trusted = KeyStore.getInstance("BKS");
      InputStream in = context.getResources().openRawResource(R.raw.mystore);
      try {
        trusted.load(in, "ez24get".toCharArray());
      } finally {
        in.close();
      }
      return new SSLSocketFactory(trusted);
    } catch (Exception e) {
      throw new AssertionError(e);
    }
  }
}

ez24get будет паролем хранилища ключей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...