我们正在将一项服务从 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/