java - 在Java 11中使用HttpBuilder API,在哪里指定hostNameVerifier?

标签 java ssl self-signed java-11 java-http-client

我们正在将一项服务从 JDK 10.0.1 迁移到 JDK 11。该服务使用 TLS 连接进行通信,其中服务器具有自签名证书。

此证书的 CA 已添加到两个 JVM 的 cacerts 中。

使用 JDK 10,这足以使用 HttpBuilder API 并与此服务进行通信。当运行相同的代码(仅从 jdk.incubator.http 移动到 java.net.http)到 JDK 11 时,我遇到了臭名昭著的“java.security.cert.CertificateException:不存在主题备用名称”错误?

据我了解,通过使用自定义实现创建 HostNameVerifier,然后将其与 HttpsUrlConnection 一起使用,可以轻松解决此问题。

但如果可能的话,我宁愿坚持使用 HttpBuilder API。

最佳答案

有一个名为“jdk.internal.httpclient.disableHostnameVerification”的系统属性,可用于禁用检查:http://hg.openjdk.java.net/jdk/jdk/file/4254bed3c09d/src/java.net.http/share/classes/jdk/internal/net/http/common/Utils.java#l110

当我这样开始服务时,我的问题就解决了:

java -Djdk.internal.httpclient.disableHostnameVerification -jar FancyService.jar

关于java - 在Java 11中使用HttpBuilder API,在哪里指定hostNameVerifier?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52859195/

相关文章:

java - Date.from(ZonedDateTime to instant) 返回前一天

java - 解析检查不起作用

asp.net - 在 ASP.NET 应用程序中通过客户端签名的 SSL 证书对用户进行身份验证

java - 从 Netbeans 构建时自动签署 JAR

java - 在数据库插入之前修剪空格

java - Android Studio 打印 EditText 返回 null

django - 无法生成或安装证书

swift - 如何快速向服务器发出 HTTPS 请求?

node.js - 如何修复与Javascript连接的Python中的SSL错误?

android - 在 Android 中添加自签名证书时出错