java.security
myのファイルJRE
を見ると、デフォルトで使用するキーストア タイプが に設定されていることがわかりますJKS
。ここに、使用できるキーストア タイプのリストがあります。
推奨されるキーストアのタイプはありますか? さまざまなキーストア タイプの長所と短所は何ですか?
リンク先の標準名リストにリストされているものよりもいくつかのタイプがあります。詳細については、暗号化プロバイダーのドキュメントを参照してください。最も一般的なのは、確かJKS
に (デフォルト) とPKCS12
(PKCS#12 ファイルの場合、多くの場合拡張子.p12
または場合によっては.pfx
) です。
JKS は、Java の世界にとどまっている場合に最も一般的です。PKCS#12 は Java 固有のものではありません。ブラウザーからバックアップされた証明書 (秘密鍵を含む) を使用するか、OpenSSL ベースのツールから取得した証明書を使用すると特に便利です ( keytool
Java 6 より前では、キーストアを変換してその秘密鍵をインポートすることはできませんでした)。 、他のツールを使用する必要がありました)。
PKCS#12 ファイルが既にある場合は、多くの場合、そのPKCS12
タイプを直接使用する方が簡単です。形式を変換することは可能ですが、キーストアの種類を直接選択できる場合はほとんど必要ありません。
Java 7 では、PKCS12
主にキーストアとしては役に立ちましたが、トラストストアとしてはあまり役に立ちませんでした(キーストアとトラストストアの違いを参照してください)。これは、秘密鍵がないと証明書エントリを格納できないためです。対照的に、JKS
では各エントリが秘密鍵エントリである必要がないため、証明書のみを含むエントリを持つことができます。これは、信頼する証明書のリストを格納するトラスト ストアに役立ちます (ただし、それらの秘密鍵)。
PKCS12
これは Java 8 で変更されたため、ストアにも証明書のみのエントリを含めることができるようになりました。(これらの変更と今後の計画の詳細については、JEP 229: Create PKCS12 Keystores by Defaultを参照してください。)
他にもいくつかのキーストア タイプがありますが、(コンテキストによっては) あまり使用されない可能性があります。
PKCS11
、通常はハードウェア暗号化トークンにアクセスするための PKCS#11 ライブラリ用ですが、Sun プロバイダーの実装は、これを介して (Mozilla からの) NSS ストアもサポートします。BKS
、BouncyCastle プロバイダーを使用します (Android で一般的に使用されます)。Windows-MY
/ Windows-ROOT
、Windows 証明書ストアに直接アクセスする場合。KeychainStore
、OSX キーチェーンを直接使用する場合。これは、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 以降を使用している場合は、Java 9 ( JEP 229PKCS12
)以降のデフォルトであるを必ず選択する必要があります。
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さらに読むには: