是否可以构建一个使用SSL/TLS Java_OPTS作为其SSLContext的Java 11 HttpClient?
我知道使用Apache的是否可以构建一个使用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
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
}
我想用Java11HttpClient
做一些类似的事情。这样做的原因是在我的用例中,我将密钥存储和信任存储视为可选的,如果不必在代码中检查它们的存在就好了。基本上,我想基于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-varJava_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-varJava_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选项
,我的应用程序马上就找到了它。