java - Netty 世界中 .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) 的等价物是什么?
问题描述
关于Netty和的一个小问题io.netty.handler.ssl.SslContext
在 Tomcat 和org.apache.http.ssl.SSLContexts
中,我们可以执行以下操作:
HttpClient httpClient = HttpClients.custom() .setSSLContext(SSLContexts.custom() .loadKeyMaterial( someKeystorePropertlyInitialized ) .loadTrustMaterial( someTruststorePropertlyInitialized ) .build( )) .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) .build ();
(赞赏我们是否可以保留字体而不包裹在代码块中)
例如,这可以解决诸如 Caused by: java.security.cert.CertificateException: No subject Alternative DNS name matching xxx found 之类的问题(这个问题不是关于是否NoopHostnameVerifier.INSTANCE
是解决此问题的正确方法。)
我的问题是,Netty 中的等价物是什么.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
,没有 .trustManager(InsecureTrustManagerFactory.INSTANCE)
,因为我有一个真正的信任存储,我只想跳过主机名,而不是所有内容
也许有什么reactor.netty.http.client.HttpClient; HttpClient.create()
?
解决方案
实际上,Netty 默认关闭了主机名验证——请参阅这个问题。看起来您正在使用的库(reactor-netty)可能已打开它。reactor-netty 的 github 上似乎存在类似的问题,它指向了解决方案,但提供的代码片段似乎比必要的要多。本质上,您只需要访问SSLEngine
fromSslHandler
并确保端点识别算法为空/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-tool-suite - Spring Tool Suite 内容辅助的奇怪行为
- java - 无法确定数组中的索引
- php - 循环中的PHP POST选择框未按正确顺序显示值
- ruby-on-rails - Special character in LIKE in PostgreSQL
- django - 无法使用 oracle ebs 数据库连接到 Django
- thorntail - 使用 Thorntail 映射 JMS JNDI 条目
- powershell - Is it possible to read out two groups in one command?
- linux-kernel - When does the cpu actually come online?
- db2 - 需要通过 JCl 在一次打印中显示 db2 表的计数和更多详细信息
- excel - VBA 用于单击链接以启动下载