回答:
System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);
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実装は、次の場所でキーストアファイルを(順番に)検索して使用します。
$JAVA_HOME/lib/security/jssecacerts
$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に設定します。
注意の言葉。Java 9以降で既存のJKSキーストアを開こうとしている場合は、次のプロパティも値を「JKS」として指定する必要があります。
javax.net.ssl.keyStoreType
javax.net.ssl.trustStoreType
その理由は、java.securityファイルで規定されているデフォルトのキーストアタイプが、Java 9以降のjksからpkcs12に変更されているためです。
-D
以下のプロパティを使用して、実行時にパスを指定することもできます
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks
私のApache Sparkアプリケーションでは、--conf
オプションを使用して証明書とキーストアのパスを提供し、extraJavaoptions
以下のようにspark-submitを使用していました
--conf 'spark.driver.extraJavaOptions=
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks'