【问题标题】:What is the equivalent of .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) in Netty world?Netty 世界中 .setSSLHostnameVerifier(NoopH​​ostnameVerifier.INSTANCE) 的等价物是什么?
【发布时间】:2020-10-04 01:41:54
【问题描述】:

关于Netty和io.netty.handler.ssl.SslContext的一个小问题

在 Tomcat 和org.apache.http.ssl.SSLContexts 中,我们可以执行以下操作:

HttpClient httpClient = HttpClients.custom() .setSSLContext(SSLContexts.custom() .loadKeyMaterial(someKeystorePropertlyInitialized) .loadTrustMaterial(someTruststorePropertlyInitialized) 。建造()) .setSSLHostnameVerifier(NoopH​​ostnameVerifier.INSTANCE) .build();

(感谢我们是否可以保留字体而不包裹在代码块中)

这可以例如解决问题,例如 Caused by: java.security.cert.CertificateException: No subject Alternative DNS name matching xxx found (这个问题不是关于NoopHostnameVerifier.INSTANCE 是否是解决这个问题的正确方法。)

我的问题是,.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)没有 .trustManager(InsecureTrustManagerFactory.INSTANCE)在Netty中的等价物是什么,因为我有一个真正的信任存储,我只想跳过主机名,而不是全部

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

【问题讨论】:

标签: java netty reactor-netty


【解决方案1】:

实际上,Netty 默认关闭了主机名验证——参见this issue。看起来您正在使用的库(reactor-netty)可能已打开它。在 reactor-netty 的 github 上似乎有一个 similar issue 指向解决方案,但提供的代码 sn-p 似乎比必要的要多。本质上,您只需要从SslHandler 访问SSLEngine 并确保端点识别算法为空/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);
              })
);

【讨论】:

  • 有人帮我解决spring-webflux 我不想设置信任管理器或其他 ssl 东西只想启用hostNameVerification 在 spring 中是否有属性或在创建 WebClient 时配置更改@跨度>
  • 我必须设置 params.setEndpointIdentificationAlgorithm("");
猜你喜欢
  • 2013-07-22
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2014-05-08
  • 2014-06-12
相关资源
最近更新 更多