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 が生成される。