1

HttpClientBuilder私はあなたが呼び出すことができるApacheを知っており、次のように渡されると、(およびトラストストア)から構成されuseSystemProperties()たクライアントを作成しますSSLContextjavax.net.ssl.keyStoreJAVA_OPTS

try (CloseableHttpClient client = HttpClientBuilder.create().useSystemProperties.build()) {
  // If javax.net.ssl props are set, make requests that require client auth
  // Otherwise make regular requests
}

Java 11 で同様のことをしたいHttpClient。この理由は私のユースケースにあります。私はキー ストアとトラスト ストアをオプションとして扱っており、コード内でそれらの存在をチェックする必要がないのは良いことです。基本的に、それらが存在する場合にSSLContext基づいて設定したいと思います。JAVA_OPTSそれ以外の場合は、"Default"コンテキストを使用してください。

4

1 に答える 1

5

TLDR: 何もする必要はありません

Newjava.net.http.HttpClientは、古いものHttpsURLConnectionや単純なSSL[Server]Socketものなどと同様に、デフォルトSSLContext.getDefault()システム プロパティを使用します javax.net.ssl.{key,trust}Store*。特定の JVM で最初に参照されたときに一度だけ読み取ります。それ以降に行われた設定 (必然的にコードによるもの) は無視されます。

これらのシステム プロパティの初期値 ( のように自動的に設定されるのではなく、JVM への他の入力と同様java.version) は-D、コマンド ラインのオプションまたは_JAVA_OPTIONS環境変数で設定できます。これらの両方を使用して、SSL/TLS とは関係のない他のシステム プロパティや、システム プロパティではないその他のオプションを設定することもできます。Java 自体は env var を使用しませんが、Java を下位として実行するJAVA_OPTSもの(サービス モニター、IDE、ツールチェーンなど) は、作成されたコマンド ラインの一部としてその env var (の内容) を使用する場合があります。

sysprops を指定しない場合、トラストストアのデフォルトは JRE/lib/security/cacerts (通常、Verisign/Symantec/Digicert、GoDaddy などの「標準」パブリック CA で提供されます) ですが、キーストアにはデフォルトがありません。つまり、クライアント認証は行われません。

于 2019-02-26T23:05:52.237 に答える