目次

概要

javax.net.SSLServerSocketを利用するための証明書を作成する。
以下の条件で証明書を生成・署名して、JVMから利用可能にする。
  • 1. CA局はOpenSSLで用意する。
  • 2. JVMで利用する鍵ペア(秘密鍵/公開鍵証明書要求)はkeytoolで生成する。
  • ※OpenSSLでCSRを発行した場合はこちら
  • 3. 1.のCA局で2.の公開鍵証明書要求に署名する

環境

こちらと同様であるため省略。

手順

CA局の作成(OpenSSLを利用)

こちらと同様であるため省略。

秘密鍵と証明諸要求の作成(keytoolを利用)

新規に証明書要求を作成する。keytoolのgenkey/reqcertコマンドを用いる。
keytoolでCSR(Certificate Signing Request)を作成する流れは以下の通り。
  • 1. 秘密鍵と自己署名した公開鍵証明書を作成して、keystoreに格納(genkeyコマンド)
  • 2. 1.の秘密鍵に対応する公開鍵からCSRを作成(reqcertコマンド)

秘密鍵の作成

 % keytool -genkey -keystore genkeyKeytoolKeyStore.11172004 -validity 365
 キーストアのパスワードを入力してください:  keystore
 姓名を入力してください。
  [Unknown]:  
 組織単位名を入力してください。
  [Unknown]:  
 組織名を入力してください。
  [Unknown]:  
 都市名または地域名を入力してください。
  [Unknown]:  
 州名または地方名を入力してください。
  [Unknown]:  
 この単位に該当する 2 文字の国番号を入力してください。
  [Unknown]:  JP
 編集部注w でよろしいですか?
  [no]:  yes
  
 <mykey> の鍵パスワードを入力してください。
        (キーストアのパスワードと同じ場合は RETURN を押してください):  (→RETURN ENTERED)

証明書要求の作成

 % keytool -certreq -keystore genkeyKeytoolKeyStore.11172004 -file keytool.csr
 キーストアのパスワードを入力してください:  keystore
 % cat keytool.csr 
 -----BEGIN NEW CERTIFICATE REQUEST-----
 MIICkTCCAk8CAQAwgYsxCzAJBgNVBAYTAkpQMREwDwYDVQQIEwhUb2t5by1UbzEUMBIGA1UEBxML
 U2V0YWdheWEtS3UxHDAaBgNVBAoTE0NsaWVudCBTZXJ2aWNlIE9yZy4xHzAdBgNVBAsTFkVudGVy
 cHJpc2UgV2ViIFNlcnZpY2UxFDASBgNVBAMTC01hc2FtaSBJdG91MIIBuDCCASwGByqGSM44BAEw
 ggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbL
 m1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E+4P208UewwI1VBNa
 FpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUCgYEA9+GghdabPd7L
 vKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwW
 eotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFM 
 O/7PSSoDgYUAAoGBAOXex1y7KOZcyOaKGAOKrHaKC4OZFg6qicvVVbG0tk1vwTuZW81d6YcJxENo
 dp9QkqROvOtfbe1RxE7xGgdCJdvIknjPdgsdvWWTnTRtqlQn/ECXNMcGI4oDFdod6bsKVjI4hmtW
 abJNtD49JqQLN24LAhRGyG/aPuZK5evITadaIz4SlrK4DQ==
 -----END NEW CERTIFICATE REQUEST-----

署名(OpenSSLを利用)

こちらで作製したCAでsignする。

署名

openssl caコマンドを行うだけ。
 % openssl ca -config openssl.cnf -in keytool.csr -out signed-keytool.pem

公開鍵証明書のimport(keytoolを利用)

事前にCA局の証明書をimportした後に、CA局がsignした公開鍵証明書をimportする。
逆順で行うと公開鍵証明書の検証の際に必要な証明書が無いためimportできない。
なお、keytoolによるCSRに対する署名された公開鍵証明書のimport処理は、
KeyStore?の既存の自己署名公開鍵証明書との差し替えとなる。

CA局の証明書をimport

keytoolを使って既存のKeyStore?に新規に信頼する証明書をimportする場合は、-aliasオプションでaliasを設定することが必須である。
 % keytool -import -keystore genkeyKeytoolKeyStore.11172004 -file cacert.pem 
 -alias opensslca
 キーストアのパスワードを入力してください:  keystore
 所有者: ないしょ
 実行者: 教えないw
 シリアル番号: 0
 有効日: Tue Nov 16 13:27:07 JST 2004 有効期限: Wed Nov 16 13:27:07 JST 2005
 証明書のフィンガープリント:
          MD5:  42:75:51:26:BB:71:10:FF:64:9D:E0:68:33:F4:E7:41
          SHA1: 3E:39:E0:43:68:2F:E6:8A:5C:AE:1C:B3:34:CA:40:87:CE:CF:AC:5E
 この証明書を信頼しますか? [no]:  yes
 証明書がキーストアに追加されました。
  
 [install後のkeystoreのlist]
 % keytool -list -keystore genkeyKeytoolKeyStore.11172004 
 キーストアのパスワードを入力してください:  keystore
 
 キーストアのタイプ: jks
 キーストアのプロバイダ: SUN
 
 キーストアには 2 エントリが含まれます。
 
 opensslca, 2004/11/17, trustedCertEntry, <- これが上の操作でいれた奴
 証明書のフィンガープリント (MD5): 42:75:51:26:BB:71:10:FF:64:9D:E0:68:33:F4:E7:41
 mykey, 2004/11/17, keyEntry,
 証明書のフィンガープリント (MD5): 7F:75:A0:2F:32:66:05:44:75:2E:B4:8D:A3:9C:2F:E3

CA局に署名された公開鍵証明書のimport

 % keytool -import -file turncut-signed.keytool.pem 
 -keystore genkeyKeytoolKeyStore.11172004 
 キーストアのパスワードを入力してください:  keystore
 証明書応答がキーストアにインストールされました。
  
 % keytool -list -keystore genkeyKeytoolKeyStore.11172004
 キーストアのパスワードを入力してください:  keystore
  
 キーストアのタイプ: jks
 キーストアのプロバイダ: SUN
  
 キーストアには 2 エントリが含まれます。
  
 opensslca, 2004/11/17, trustedCertEntry,
 証明書のフィンガープリント (MD5): 42:75:51:26:BB:71:10:FF:64:9D:E0:68:33:F4:E7:41
 mykey, 2004/11/17, keyEntry,
 証明書のフィンガープリント (MD5): 96:94:00:3C:2A:C3:5E:D9:D3:5C:B1:53:4D:E0:1A:3C

 ※ self signedの MACは
 mykey, 2004/11/17, keyEntry,
 証明書のフィンガープリント (MD5): 7F:75:A0:2F:32:66:05:44:75:2E:B4:8D:A3:9C:2F:E3
 と別物になっています。

[備考] CA局の公開鍵証明書を削除

keytoolの -deleteオプションで実行できます。具体的には以下の通り。
 keytool -delete -keystore [対象となるkeystore] -alias [CA局の公開鍵証明書エントリ(=trustedCertEntry)]

参考

参考リンク


Last-modified: 2008-04-14 16:31:02