我们正在将服务从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。
答案 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