目次

背景

Java2標準の鍵管理ツールkeytoolは公開鍵のimport/exportやCSRの生成に関する機能を持っている。 また、KeyStore?の秘密鍵をimport/exportする機能は持っていないが、 Java2標準のKeyStore?実装クラスはPKCS#12形式で用意された 秘密鍵/公開鍵のkey pairをKeyStore?として利用することが可能である。

このkeytoolでは提供していない事項、既存のKeyStore?の秘密鍵をimport/exportする機能、 を必要とする場合、Java2 CoreAPIのjava.securityパッケージ以下の適当なクラスを利用して、 KeyStore?を操作する必要がある。

tomcatのkeystoreとして、Java DefaultのJKSは指定できるけど、他のタイプって言うかPKCS12のがあっても・・・と言う感じだったが、設定にはkeytoolのオプションでも存在する keystoreTypeが存在するため、pkcs12を設定すれば問題なく通ると思う。 さらに6同梱のkeytoolのマニュアルを読んでみると爽やかに-importkeystoreとか新設されてるしw

まぁ、これはこれとして、6のjava.security付近を見てみるつもりで作ってみよぅ。

作るもの

以下の条件で作成する
  • JDK6.0.xを使う
  • oopenssl genrsa -des3 -out serv.key 1024で作ったPEMをjksのKeyStore?に突っ込むだけ。pass phraseはとりあえずhogeにした。self singnedにするところは、コード中で自力更生しつつ、jksのkeystoreを作成する

作らないもの

作るものは作るものとして、opensslで作ったpkcs8の秘密鍵(or self signedの証明書も込みにしたpkcs12)を元にjksのkeystoreを用意する手順も書いておく。
  • 0. 6系のjdkを用意
# java -version
java version "1.6.0_01"
Java(TM) SE Runtime Environment (build 1.6.0_01-b06)
Java HotSpot(TM) Client VM (build 1.6.0_01-b06, mixed mode, sharing)
  • 1. PKCS12のself sigend key+certのkeystoreを用意
    • opensslのCAスクリプトで作成される private key+self signed crtをopenssl pkcs12コマンドで固めてみた
# openssl pkcs12 -export -inkey private/cakey.pem -in cacert.pem \
-certfile cacert.pem -out ca.p12
Enter pass phrase for private/cakey.pem:
Enter Export Password:
Verifying - Enter Export Password:
# keytool -list -keystore ca.p12 -storetype pkcs12
キーストアのパスワードを入力してください:

キーストアのタイプ: PKCS12
キーストアのプロバイダ: SunJSSE

キーストアには 1 エントリが含まれます。

2, 2008/04/14, PrivateKeyEntry,
証明書のフィンガープリント (MD5): 1F:D6:4A:A3:F6:15:E2:10:92:8C:6C:EC:D6:6B:F8:FE
  • 2. 6系新規のoption -importkeystoreでkeystoreのtype変更をして、保存する
#  keytool -importkeystore -srckeystore ca.p12 -srcstoretype pkcs12 \
-destkeystore ca.jks -deststoretype jks
出力先キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
ソースキーストアのパスワードを入力してください:
別名 1 のエントリのインポートに成功しました。
インポートコマンドが完了しました:  1 件のエントリのインポートが成功しました。
0 件のエントリのインポートが失敗したか取り消されました
  • 3. typeを変換したkeystoreを表示
# keytool -list -keystore ca.jks
キーストアのパスワードを入力してください:

キーストアのタイプ: JKS
キーストアのプロバイダ: SUN

キーストアには 1 エントリが含まれます。

1, 2008/04/14, PrivateKeyEntry,
証明書のフィンガープリント (MD5): 1F:D6:4A:A3:F6:15:E2:10:92:8C:6C:EC:D6:6B:F8:FE

このオプション、もっと前から作っておいていいと思うんですが。。。

参考リンク


Last-modified: 2008-04-14 16:11:33