有一个具有以下SAN记录的证书创建HTTPS的服务器:
SubjectAlternativeName [
DNSName: localhost
IPAddress: 127.0.0.1
URIName: https://localhost
DNSName: *
]当我试图从JDK11连接到这个服务器时,我会得到以下错误:
javax.net.ssl.SSLHandshakeException:找不到与主机服务匹配的主题替代DNS名称。
其中,host-service是服务所在的主机名。我反复检查了信任库,它拥有信任证书所需的ca-certs。在使用JDK8时,同样的应用程序也可以很好地工作。
在JDK11中,信任通配符DNSs的默认行为是否已经改变,而现在却不起作用?另外,相关的问题可能是服务器使用TLSv1.1运行。但是,我将我的客户端应用程序配置为与-Djdk.tls.client.protocols="TLSv1.1,TLSv1.2"一起运行,因此这应该是可行的。没有以任何方式更改默认SSL上下文,信任存储位于默认路径(/etc/pki/java)中。
发布于 2021-04-22 15:55:06
我能想出的唯一方法是使用不安全的SSL作为缺省值:
TrustManagerFactory trustManagerFactory = InsecureTrustManagerFactory.INSTANCE;
SslContext sslContext;
SSLContext defaultSSLContext;
try {
sslContext = SslContextBuilder.forClient()
.trustManager(trustManagerFactory)
.build();
defaultSSLContext = SSLContext.getInstance("SSL");
defaultSSLContext.init(null, trustManagerFactory.getTrustManagers(), null);
} catch (Exception ex) {
throw new IllegalStateException(ex);
}
SSLContext.setDefault(defaultSSLContext);https://stackoverflow.com/questions/66919432
复制相似问题