是否可以构建一个使用SSL/TLS Java_OPTS作为其SSLContext的Java 11 HttpClient?

是否可以构建一个使用SSL/TLS Java_OPTS作为其SSLContext的Java 11 HttpClient?,java,ssl,java-11,java-http-client,Java,Ssl,Java 11,Java Http Client,我知道使用Apache的HttpClientBuilder可以调用useSystemProperties(),如果作为JAVA\u OPTS传递,它将使用SSLContext从javax.net.ssl.keyStore(和信任库)配置的SSLContext>创建一个客户端: try (CloseableHttpClient client = HttpClientBuilder.create().useSystemProperties.build()) { // If javax.net.s

我知道使用Apache的
HttpClientBuilder
可以调用
useSystemProperties()
,如果作为
JAVA\u OPTS
传递,它将使用
SSLContext
javax.net.ssl.keyStore
(和信任库)配置的
SSLContext>创建一个客户端:

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

我想用Java11
HttpClient
做一些类似的事情。这样做的原因是在我的用例中,我将密钥存储和信任存储视为可选的,如果不必在代码中检查它们的存在就好了。基本上,我想基于
JAVA\u OPTS
设置
SSLContext
(如果存在);否则,只需使用TLDR即可。

TLDR:您无需执行任何操作

新的
java.net.http.HttpClient
,像旧的
HttpsURLConnection
和普通的
SSL[Server]Socket
和其他东西一样,默认为
SSLContext.getDefault()
,默认情况下它使用系统属性
javax.net.SSL.{key,trust Store*/code>——只读取一次,第一次在给定JVM中引用它时;在此之后进行的任何设置(必须通过代码)都将被忽略

这些系统属性的初始值(像其他输入到JVM的属性一样,而不是像
java.version
那样自动设置)可以通过命令行上的
-D
选项或
\u java\u OPTIONS
环境变量中设置;这两个选项还可用于设置与SSL/TLS无关的其他系统属性以及其他非系统属性的选项。Java本身不使用env-var
Java_OPTS
,但一些将Java作为从属运行的东西(如服务监视器、IDE、工具链等)可能会将该env-var的(内容)用作创建的命令行的一部分


注意:如果不指定sysprops,信任库默认为JRE/lib/security/cacerts(通常随Verisign/Symantec/Digicert、GoDaddy等“标准”公共CA提供),但密钥库没有默认值,即不进行客户端身份验证。

TLDR:您不需要做任何事情

新的
java.net.http.HttpClient
,像旧的
HttpsURLConnection
和普通的
SSL[Server]Socket
和其他东西一样,默认为
SSLContext.getDefault()
,默认情况下它使用系统属性
javax.net.SSL.{key,trust Store*/code>——只读取一次,第一次在给定JVM中引用它时;在此之后进行的任何设置(必须通过代码)都将被忽略

这些系统属性的初始值(像其他输入到JVM的属性一样,而不是像
java.version
那样自动设置)可以通过命令行上的
-D
选项或
\u java\u OPTIONS
环境变量中设置;这两个选项还可用于设置与SSL/TLS无关的其他系统属性以及其他非系统属性的选项。Java本身不使用env-var
Java_OPTS
,但一些将Java作为从属运行的东西(如服务监视器、IDE、工具链等)可能会将该env-var的(内容)用作创建的命令行的一部分


注意:如果不指定sysprops,信任库默认为JRE/lib/security/cacerts(通常随Verisign/Symantec/Digicert、GoDaddy等“标准”公共CA提供),但密钥库没有默认值,也就是说,没有进行客户端身份验证。

这是默认情况下已经发生的事情。这是默认情况下已经发生的事情。是的!我也是这么想的。我的问题是,
JAVA\u OPTS
需要更改为
\u JAVA\u OPTIONS
,我的应用程序马上就把它选中了。是的!我也是这么想的。我的问题实际上是,
JAVA\u选项
需要更改为
\u JAVA\u选项
,我的应用程序马上就找到了它。