サーバーとの安全な通信を必要とする Android アプリケーションを開発しました。サーバーの証明書が Android の証明書リストに含まれていないため、信頼できないサーバーに関する例外が発生します。
次の KeyChain API (ICS 以降で利用可能) を使用して、証明書のインストールをユーザーに促します。その後、通信はシームレスに機能します。
BufferedInputStream bis = new BufferedInputStream(getAssets().open(
PKCS12_FILENAME));
byte[] keychain = new byte[bis.available()];
bis.read(keychain);
Intent installIntent = KeyChain.createInstallIntent();
installIntent.putExtra(KeyChain.EXTRA_PKCS12, keychain);
installIntent.putExtra(KeyChain.EXTRA_NAME, DEFAULT_ALIAS);
startActivityForResult(installIntent, INSTALL_KEYCHAIN_CODE);
アプリケーションの起動時に上記のコードを使用していますが、証明書が既に存在する場合でもプロンプトが表示されます。これに関して、次の 2 つの質問があります。
特定の証明書が既に存在するかどうかをプログラムで特定するにはどうすればよいですか? そのため、まだ存在しない場合にのみプロンプトを表示します。
アプリケーションのインストール中に発生する、証明書のインストールをユーザーに促すために使用するイベントはありますか?