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

时间:2018-10-17 16:05:55

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

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

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

使用JDK 10,这足以使用HttpBuilder API并与此服务进行通信。当运行相同的代码(只是从jdk.incubator.http到java.net.http的更改)到JDK 11时,我遇到了臭名昭著的“ java.security.cert.CertificateException:没有主题替代名称”错误吗?

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

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

1 个答案:

答案 0 :(得分:0)

有一个恰当地名为“ 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