如何解决Netty world中的.setSSLHostnameVerifierNoopHostnameVerifier.INSTANCE等效于什么?
有关Netty和io.netty.handler.ssl.SslContext
在Tomcat和org.apache.http.ssl.SSLContexts
中,我们可以执行以下操作:
HttpClient httpClient = HttpClients.custom() .setSSLContext(SSLContexts.custom() .loadKeyMaterial( someKeystorePropertlyInitialized ) .loadTrustMaterial( someTruststorePropertlyInitialized ) 。建立()) .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) .build();
(感谢我们可以保留字体并且不包装在代码块中)
例如,这可以解决诸如以下问题的原因:java.security.cert.CertificateException:未找到与xxx匹配的主题备用DNS名称
(此问题与NoopHostnameVerifier.INSTANCE
是否是解决此问题的正确方法无关。)
我的问题是.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
的净值等于多少,没有 .trustManager(InsecureTrustManagerFactory.INSTANCE)
,因为我有一个真实的信任存储区,所以我只想跳过主机名,不是一切
也许与reactor.netty.http.client.HttpClient; HttpClient.create()
有关系?
解决方法
实际上,Netty默认情况下已关闭主机名验证-请参见this issue。看来您正在使用的库(reactor-netty)可能已将其打开。在Reactor-netty的github上似乎有一个similar issue指向解决方案,但是所提供的代码片段似乎超出了必要的范围。本质上,您所需要做的就是从SSLEngine
访问SslHandler
并确保端点标识算法为空/空:
HttpClient.create().secure(
ssl -> ssl.sslContext(sslContext)
.handlerConfigurator(handler-> {
SSLEngine engine = handler.engine();
SSLParameters params = new SSLParameters();
// ... set other SSL params
params.setEndpointIdentificationAlgorithm(null);
})
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。