技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

Javaのkeystoreタイプ

Java の keystore のタイプとして以下をよく見かける。これらの違いがよく分かっていなかったので、ここに簡単に纏める。
なお、keystore は、公開鍵証明書とそれに対する秘密鍵を格納する場所のこと。Java アプリが SSL/TLS 通信を行う時などに使用される。

  • PKCS12 (Public Key Cryptography Standards #12)

  業界標準の keystore タイプ。Java 以外からも使用できる。

  • JKS (Java Key Store)

  Java 固有の keystore タイプ。

  • JCEKS (Java Cryptography Extensions Key Store)

  JKS の拡張版。JKS より安全性をより高めたものらしい。


Java9 以降は、PKCS12 がデフォルトで使用されるようになったので、特に理由がなければこれを使うのが良さそう。

最後に参考として、Java11 で keystore を作成し、その中身を確認した時の作業ログを貼っておく。

keytool.exe -genkeypair -validity 365 -keyalg RSA -keystore keystore -storepass storepass -alias test
姓名は何ですか。
  [Unknown]:
組織単位名は何ですか。
  [Unknown]:
組織名は何ですか。
  [Unknown]:
都市名または地域名は何ですか。
  [Unknown]:
都道府県名または州名は何ですか。
  [Unknown]:
この単位に該当する2文字の国コードは何ですか。
  [Unknown]:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknownでよろしいですか。
  [いいえ]:  はい

keytool.exe -list -keystore keystore -storepass storepass -v
キーストアのタイプ: PKCS12 ★
キーストア・プロバイダ: SUN

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

別名: test
作成日: 2022/04/12
エントリ・タイプ: PrivateKeyEntry
証明書チェーンの長さ: 1
証明書[1]:
所有者: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
発行者: CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
シリアル番号: 2037e95f
有効期間の開始日: Tue Apr 12 15:17:37 JST 2022終了日: Wed Apr 12 15:17:37 JST 2023
証明書のフィンガプリント:
         SHA1: 81:16:57:41:9A:4A:EC:05:F8:EB:A3:9D:59:5B:CF:BD:AB:20:1F:BA
         SHA256: 6A:97:22:6A:A0:08:08:4B:A2:1C:48:A7:87:4C:A2:F8:0C:0C:0F:1A:C3:F6:42:08:1F:DA:11:76:07:2B:E7:8F
署名アルゴリズム名: SHA256withRSA
サブジェクト公開鍵アルゴリズム: 2048ビットRSA鍵
バージョン: 3

拡張:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 90 52 9D 85 F0 AE 8B DB   3D 08 15 A9 1D 3D 9B EA  .R......=....=..
0010: B1 C0 1E 7F                                        ....
]
]



*******************************************
*******************************************

上述の通り、デフォルトでは、PKCS12 のタイプの keystore が生成される。