hee*_*eez 1 java ssl java-http-client java-11
我知道HttpClientBuilder您可以使用 Apache调用useSystemProperties(),如果传递为,它将创建一个SSLContext从javax.net.ssl.keyStore(和信任库)配置的客户端JAVA_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
}
Run Code Online (Sandbox Code Playgroud)
我想用 Java 11 做一些类似的事情HttpClient。这样做的原因是在我的用例中,我将密钥存储和信任存储视为可选的,并且不必在我的代码中检查它们的存在会很好。基本上,我想SSLContext根据JAVA_OPTS它们是否存在来设置;否则只使用"Default"上下文。
TLDR:你不需要做任何事情
新的java.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_OPTS,但一些将Java 作为从属运行的东西(如服务监视器、IDE、工具链等)可能会使用(的内容)该 env var 作为创建的命令行的一部分。
请注意,如果您未指定 sysprops,则信任库默认为 JRE/lib/security/cacerts(通常随 Verisign/Symantec/Digicert、GoDaddy 等“标准”公共 CA 提供),但密钥库没有默认值,即没有完成客户端身份验证。
| 归档时间: |
|
| 查看次数: |
2219 次 |
| 最近记录: |