web-dev-qa-db-ja.com

java SSLと証明書キーストア

私のJavaプログラムは、証明書を含む私の鍵ストアがどこにあるかをどのようにして知るのですか?あるいは、キーストアを探す場所をJavaプログラムに指示するにはどうすればよいですか。

何らかの方法でキーストアを指定した後、サーバーをクライアントに対して認証するために使用する証明書を指定する方法

143
deborah
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);
98
DaveH

SSLプロパティはシステムプロパティを介してJVMレベルで設定されます。つまり、プログラムの実行時にそれらを設定することができます(Java -D ....)か、System.setPropertyを実行してコードで設定することができます。

設定する必要がある特定のキーは以下のとおりです。

javax.net.ssl.keyStore - アプリケーションプロセス自身の証明書とプライベートキーを含むJavaキーストアファイルの場所。 Windowsでは、指定されたパス名はバックスラッシュの代わりにスラッシュ/を使用する必要があります。

javax.net.ssl.keyStorePassword - javax.net.ssl.keyStoreで指定されたキーストアファイルから秘密鍵にアクセスするためのパスワード。このパスワードは2回使用されます。キーストアファイルのロックを解除する(ストアパスワード)、およびキーストアに格納されている秘密キーを復号化する(キーパスワード)。

javax.net.ssl.trustStore - このアプリケーションプロセスによって信頼されているCA証明書のコレクションを含むJavaキーストアファイル(トラストストア)の場所。 Windowsでは、指定されたパス名はバックスラッシュ/の代わりにフォワードスラッシュ\を使用しなければなりません。

このプロパティを使用してトラストストアの場所が指定されていない場合、SunJSSE実装は次の場所でキーストアファイルを順番に検索して使用します。

  1. $Java_HOME/lib/security/jssecacerts
  2. $Java_HOME/lib/security/cacerts

javax.net.ssl.trustStorePassword - javax.net.ssl.trustStoreで指定されたキーストアファイルのロックを解除するためのパスワード(ストアパスワード)。

javax.net.ssl.trustStoreTypeオプション)Javaキーストアファイル形式の場合、このプロパティの値はjks(またはJKS)です。デフォルト値はすでにjksなので、通常はこのプロパティを指定しません。

---(javax.net.debug - SSL/TLSレイヤのログ記録を有効にするには、このプロパティをsslに設定します。

277

まず第一に、2種類のキーストアがあります。

個人および一般

アプリケーションは起動時に示されたものかシステムのデフォルトを使用します。

JREまたはJDKが実行されている場合、または個人用または「グローバル」フォルダをチェックしている場合は、別のフォルダになります。

それらも暗号化されています

つまり、パスは次のようになります。

"一般的なもの"の$Java_HOME/lib/security/cacertsは、当局のすべてのCAを持ち、非常に重要です。

11
Carlos Garcia

ただの注意です。 Java 9以降で既存のJKSキーストアを開こうとしている場合は、必ず "JKS"として値を指定して以下のプロパティについても言及する必要があります。

javax.net.ssl.keyStoreType
javax.net.ssl.trustStoreType

これは、Java 9以降のjksから、Java.securityファイルで規定されているデフォルトのキーストアタイプがpkcs12に変更されたためです。

11

以下のように-Dプロパティを使って実行時にパスを記述することもできます。

-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks

私のApache sparkアプリケーションでは、私は--confオプションとextraJavaoptionsを使って、次のようにcertsとキーストアのパスを提供していました

--conf 'spark.driver.extraJavaOptions= 
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts 
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks'