Top / Network / SSL / 秘密鍵の抽出

IBMのHTTPServer(IHS)では、SSL構築にはikeymanという鍵DBを管理するためのツールを用います。で、ikeymanで作成される鍵DBはCMS形式(拡張子kdb)というファイル形式なのですが、IHSでSSL環境を作った後に、アクセラレータやApacheなどに移行しようと思っても秘密鍵の抽出方法が分からず困ってました。

いろいろ調べてみると、keytoolで作成した秘密鍵のexport - Security & Trust あたりに情報が。ikeymanを使ってkdbをJava Key Store形式(JKS)に別名保存し、それをJavaで操作すれば良さそうです。

流れとしては、

  • ikeymanでKDBをJKSに保存
  • JavaプログラムでJKSから秘密鍵をバイナリで抽出
  • opensslのコマンドでBase64のテキストファイルに変換

でできそうです。

Javaプログラム

以下のようなプログラムで、バイナリの秘密鍵が抽出できます。

public class KeyGenerator {
  public static void main(String[] args) throws Exception {
    String alias = "hoge"; // 鍵DB内の別名
    String keyStorePass = "fuga"; // 鍵DBのパスワード
    String jksFile = "key.jks"; // 鍵DBのファイル名
    KeyStore keyStore = KeyStore.getInstance("JKS");
    FileInputStream in = new FileInputStream(jksFile);
    keyStore.load(in, keyStorePass.toCharArray());
    Key key = keyStore.getKey(alias, keyStorePass.toCharArray());
    byte[] der = key.getEncoded(); // バイナリの秘密鍵
    write(der); // 秘密鍵をファイル保存
  }

  public static void write(byte[] b) {
    BufferedOutputStream stream = null;
    try {
      File file = new File("key.der");
      FileOutputStream fstream = new FileOutputStream(file);
      stream = new BufferedOutputStream(fstream);
      stream.write(b);
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      if (stream != null) {
        try {
          stream.close();
        } catch (IOException e1) {
          e1.printStackTrace();
        }
      }
    }
  }
}

OpenSSLのコマンドでBase64に変換する

openssl pkcs8 -inform der -in key.der -outform pem -out key.pem -nocrypt

key.pemが抽出されました。実際見てみると

-----BEGIN RSA PRIVATE KEY-----
hogehogehoge.....
-----END RSA PRIVATE KEY-----

確かに秘密鍵が抽出できました!

ちなみに

./keytool.exe  -export -alias hoge -keystore key.jks  -rfc > hogehoge.cer
pass: fuga

で証明書*1を抽出することができます。

関連リンク


この記事は

選択肢 投票
おもしろかった 6  
そうでもない 0  

Top / Network / SSL / 秘密鍵の抽出

現在のアクセス:19520


*1 公開鍵と、公開鍵のハッシュ値をCAの秘密鍵で暗号化したもの<-これが署名

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-05-17 (金) 17:59:45 (2030d)