Netty 世界中 .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) 的等价物是什么?

What is the equivalent of .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) in Netty world?

一个关于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)without .trustManager(InsecureTrustManagerFactory.INSTANCE)在Netty中的等价物是什么,因为我有一个真正的信任库,我只想跳过主机名,而不是所有内容

也许有 reactor.netty.http.client.HttpClient; HttpClient.create() 的东西?

实际上,Netty 已默认关闭主机名验证 - 请参阅 reactor-netty 的 github 上的 this issue. It looks like the library you're using (reactor-netty) might have it turned on. There appears to be a similar issue,其中指出了解决方案,但提供的代码片段似乎可以超过必要的。本质上,您只需要从 SslHandler 访问 SSLEngine 并确保端点识别算法是 empty/null:

HttpClient.create().secure(
        ssl -> ssl.sslContext(sslContext)
              .handlerConfigurator(handler-> {
                  SSLEngine engine = handler.engine();
                  SSLParameters params = new SSLParameters();
                  // ... set other SSL params
                  params.setEndpointIdentificationAlgorithm(null);
              })
);