IBMのHTTPServer(IHS)では、SSL構築にはikeymanという鍵DBを管理するためのツールを用います。で、ikeymanで作成される鍵DBはCMS形式(拡張子kdb)というファイル形式なのですが、IHSでSSL環境を作った後に、アクセラレータやApacheなどに移行しようと思っても秘密鍵の抽出方法が分からず困ってました。 いろいろ調べてみると、keytoolで作成した秘密鍵のexport - Security & Trust あたりに情報が。ikeymanを使ってkdbをJava Key Store形式(JKS)に別名保存し、それをJavaで操作すれば良さそうです。 流れとしては、
でできそうです。 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を抽出することができます。 関連リンク †
この記事は 現在のアクセス:19520 |