java.security
my のファイルJRE
を見ると、デフォルトで使用するキーストアタイプがに設定されていることがわかりますJKS
。ここでは、使用できるキーストアのタイプのリストがあります。
推奨されるキーストアタイプはありますか?さまざまなタイプのキーストアの長所/短所は何ですか?
java.security
my のファイルJRE
を見ると、デフォルトで使用するキーストアタイプがに設定されていることがわかりますJKS
。ここでは、使用できるキーストアのタイプのリストがあります。
推奨されるキーストアタイプはありますか?さまざまなタイプのキーストアの長所/短所は何ですか?
回答:
リンクした標準の名前リストにリストされているタイプよりもいくつかのタイプがあります。詳細については、暗号プロバイダーのドキュメントをご覧ください。最も一般的なのは確かにJKS
(デフォルト)とPKCS12
(PKCS#12ファイルの場合、多くの場合、拡張子が付い.p12
たり、場合によっては.pfx
)です。
Javaの世界にいる場合、JKSが最も一般的です。PKCS#12はJava固有ではありません。ブラウザからバックアップされた、またはOpenSSLベースのツールから取得された証明書(プライベートキーを使用)を使用すると特に便利です(keytool
Java 6より前にキーストアを変換してそのプライベートキーをインポートできませんでした)なので、他のツールを使用する必要がありました)。
すでにPKCS#12ファイルがある場合、PKCS12
タイプを直接使用する方が簡単なことがよくあります。フォーマットを変換することは可能ですが、キーストアのタイプを直接選択できる場合はほとんど必要ありません。
Java 7では、PKCS12
主にキーストアとして役立ちましたが、プライベートキーなしでは証明書エントリを格納できなかったため、トラストストア(キーストアとトラストストアの違いを参照)にはあまり役立ちませんでした。対照的に、JKS
各エントリが秘密鍵エントリである必要はないため、証明書のみを含むエントリを作成できます。これは、信頼できる証明書のリストを保存するトラストストアに役立ちます(ただし、それらの秘密鍵)。
これはJava 8で変更されたため、証明書のみのエントリをPKCS12
ストアにも持つことができるようになりました。(これらの変更と詳細な計画の詳細については、JEP 229:Create PKCS12 Keystores by Defaultを参照してください。)
他にもいくつかのキーストアタイプがあり、おそらくあまり使用されません(コンテキストによって異なります)。
PKCS11
、PKCS#11ライブラリの場合、通常はハードウェア暗号トークンにアクセスしますが、Sunプロバイダの実装は、これを介して(Mozillaからの)NSSストアもサポートします。BKS
、BouncyCastleプロバイダー(一般的にAndroidで使用されます)を使用します。Windows-MY
/ Windows-ROOT
、Windows証明書ストアに直接アクセスする場合。KeychainStore
、OSXキーチェーンを直接使用する場合。JKS
変化したと思いますJCEKS
これは、Javaのさまざまなタイプのキーストアと、さまざまなタイプのキーストアの違いを紹介する投稿です。http://www.pixelstech.net/article/1408345768-Different-types-of-keystore-in-Java----概要
以下は、投稿のさまざまなキーストアの説明です。
JKS、Javaキーストア。このファイルは、sun.security.provider.JavaKeyStoreにあります。このキーストアはJava固有であり、通常はjksの拡張子があります。このタイプの鍵ストアには、秘密鍵と証明書を含めることができますが、秘密鍵の保管には使用できません。これはJava固有のキーストアであるため、他のプログラミング言語では使用できません。
JCEKS、JCEキーストア。このファイルは、com.sun.crypto.provider.JceKeyStoreにあります。このキーストアにはjceksの拡張子があります。JCEKS鍵ストアに入れることができるエントリーは、秘密鍵、秘密鍵、および証明書です。
PKCS12、これはJavaおよびその他の言語で使用できる標準のキーストアタイプです。このキーストアの実装は、sun.security.pkcs12.PKCS12KeyStoreにあります。通常、p12またはpfxの拡張子があります。このタイプの秘密鍵、秘密鍵、および証明書を保管できます。
PKCS11、これはハードウェアキーストアタイプです。これは、JavaライブラリがLuna、nCipherなどのハードウェアキーストアデバイスに接続するためのインターフェースを提供します。この実装は、sun.security.pkcs11.P11KeyStoreにあります。キーストアをロードするときに、特定の構成で特定のプロバイダーを作成する必要はありません。このキーストアは、秘密鍵、秘密鍵、および証明書を格納できます。キーストアをロードすると、エントリはキーストアから取得され、ソフトウェアエントリに変換されます。
Java 8以降を使用している場合はPKCS12
、Java 9以降のデフォルト(JEP 229)を必ず選択してください。
比べて利点JKS
とはJCEKS
、次のとおりです。
PKCS12
標準形式です。他のプログラムやライブラリで読み取ることができます1JKS
でJCEKS
はありません。これは、特にAndroid開発者の間で人気のある、これらのタイプのキーストアのパスワードをブルートフォースで強制するための多数のツールで見ることができます。2、31 Java 11で修正されたJDK-8202837があります。
2すべてのキーストアタイプ(PKCS12を含む)で使用されるPBEの反復回数は以前は週(CVE-2017-10356)でしたが、これは9.0.1、8u151、7u161、および6u171で修正されています
3さらに読むために: