- - PR -
keytoolで作成した秘密鍵のexport
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-02-14 22:28
ヴァンフォーレ増嶋です。
お世話になっております。 [環境情報] Windows Server 2003 JDK1.6.0.01 Tomcat 6.0.13 上記の環境で、JDK付属のkeytoolを使用して、SSLの設定を行っております。 (1)keytool -genkey でキーストア作成 (2)keytool -certreq でCSR作成 (3)CSRをベリサイン社に提出 (4)keytool -import で中間証明書、(3)で取得した証明書のインポート (5)Tomcatの設定&Tomcat再起動 上記の手順でhttpsでアクセス可能な状態になりました。ところが、ブラウザとWebサーバの間に存在するWAF(Webアプリケーションファイヤーウォール)に対して、上記のWebサーバの秘密鍵を登録する必要があることを失念しておりました。 他の商用WebアプリケーションサーバでSSLを設定した場合は、秘密鍵ファイルが生成されていたため、登録作業は可能でしたが、keytoolで実施した場合は、秘密鍵がキーストア(バイナリ)に格納された状態(←適切な表現かどうか怪しいです)であり、WAFへの登録が行えない状態です。 http://www.wizard-limit.net/tools/ca2.html →keytoolで秘密鍵のexportはできない →javaプログラムを作成すれば可能 という情報は得ましたが、参考として掲載されていた、 http://java-house.jp/ml/archive/j-h-b/051468.html の内容が理解できていないという状態です。 Javaのコーディング経験がまったくない初心者のため、 カスタマイズはもちろん、上記のサンプルコードが、 現在の要件を満たしているのかどうかすら判断できておりません。 もし同様の問題に直面して、解決された方がおりましたら、 対応方法をご教授頂けないでしょうか。 |
|
投稿日時: 2008-02-15 10:23
やったことあります。意外と簡単です。
掲載先のプログラムをちらと見てみましたが、私もその中のGetPrivateKey.javaとほぼ同じ ようなプログラムを作りました。 えっと、ぱっと見ただけですが、1箇所バグらしきものがありますね。 ks.load(fs, null); ですが、これってきっと ks.load(fs, storepass.toCharArray()); の間違いじゃないかと思います。たぶん。 詳しくはJavaのAPIマニュアルを見るとよいです。 http://java.sun.com/javase/ja/6/docs/ja/api/index.html その中のjava.security.KeyStoreの項目を見れば分かります。 では。 |
|
投稿日時: 2008-02-15 13:25
増嶋です。
blunder様 > ありがとうございます。 >えっと、ぱっと見ただけですが、1箇所バグらしきものがありますね。 >ks.load(fs, null); >ですが、これってきっと >ks.load(fs, storepass.toCharArray()); >の間違いじゃないかと思います。たぶん。 以下のソース(これもどこかから拾ってきたものです。。。)で実行して、 der形式のファイルを出力できました。ks.loadはblunder様のおっしゃる通りの 形になっております。 (1)コンパイル javac△-classpath△.△GetPrivateKey.java (2)実行 C:\\>java -classpath . GetPrivateKey *** *** *** *** > key.der (3)der→pem C:\\OpenSSL\\bin>openssl pkcs8 -inform der -in key.der -outform pem -out key.pem -nocrypt /* * $ javac GetPrivateKey.java * $ java GetPrivateKey storepass keypass keystore alias >key.out */ import java.security.KeyStore; import java.security.Key; import java.io.FileInputStream; public class GetPrivateKey { public static void main(String[] args) throws Exception { String spass = args[0]; String kpass = args[1]; String keystore = args[2]; String alias = args[3]; KeyStore ks = KeyStore.getInstance("JKS"); FileInputStream fs = new FileInputStream(keystore); ks.load(fs, spass.toCharArray()); Key key = ks.getKey(alias, kpass.toCharArray()); System.out.write(key.getEncoded()); } } まだWAFへの登録は未実施ですが、問題なさそうです。 ありがとうございました。 |
1