キーストア (Key Store) は鍵と証明書を保管するためのデータベースファイル
です。ファイル全体がパスワードによって暗号化されており、また鍵の保管区域である
エントリと呼ばれる領域も個別のパスワードで保護することができるため、
スタンドアロン Java アプリケーションの鍵や証明書の保管ファイルなどに使用する
ことができます*1。
Java プログラム以外からでも JDK 付属のキーストア管理ツール
keytool
を使用して鍵や証明書の作成、削除、インポート、エクスポート、また Java では作成
できない自己署名証明書の作成が行えます。
なお、安全が保証されているドメイン (システム内のデータベースなど) を使用して
鍵を管理できるのであれば Key#getEncoded() メソッドで得られるバイナリを保管した
方が簡単です (共通鍵、公開鍵
のサンプルコード参照)。
*1 鍵の保管には証明書が必要ですが、標準の Java 機能では
証明書を作成できないため実質 Java からは参照専用です。
Java からキーストアにアクセスするには
KeyStore
クラスを使用します。load() メソッドに null を指定する事で空のキーストアとして
使用する事ができます。
Java
// キーストアの新規構築と初期化
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(null, null);
Java で使用できるキーストアのアルゴリズムは
こちら
を参照。実行環境で実際に使用できるアルゴリズムは Security.getAlgorithms("KeyStore")
で取得できます。
[CASEEXACTJKS, WINDOWS-ROOT, JCEKS, WINDOWS-MY, PKCS12, JKS]
既存のキーストアを読み込むには load() メソッドにファイルの入力ストリームとパス
ワードを指定します (以下例外処理省略)。
Java
// キーストアの読み込み
KeyStore keyStore = KeyStore.getInstance("JKS");
InputStream in = new FileInputStream(file);
keyStore.load(in, password);
in.close();
キーストアをファイルに保存する場合は store() メソッドに出力先とパスワードを
指定します。
Java
// キーストアの書き込み
OutputStream out = new FileOutputStream(file);
keyStore.store(out, password);
out.close();