Gos*_*sia 12 java ssl https reactor-netty spring-webflux
我正在尝试使用ssl和客户端主机名验证来配置spring-webflux WebClient(具有底层的Reactor Netty)。我提供了javax.net.ssl.SSLContext,HostnameVerifier和受信任的主机名列表(作为字符串列表)。
到目前为止,我已经使用SSLContext配置了WebClient,但是找不到配置主机名验证的方法。
陈述我的问题:我有一组信任的服务主机名(字符串列表)和一个HostnameVerifier。我想用它配置我的WebClient。
是否可以使用javax.net.ssl.HostnameVerifier做到这一点?反应堆网络中是否有替代方法?
到目前为止,这是我得到的:
WebClient.builder()
.clientConnector(
new ReactorClientHttpConnector(
opt -> opt.sslContext(new JdkSslContext(mySSLContext,
true, ClientAuth.OPTIONAL))))
.build();
Run Code Online (Sandbox Code Playgroud)
您应该提供有效的证书颁发机构证书 ( trustManager()) 和可选的用户证书以及用于授权的私钥和私钥密码 ( keyManager())。您的服务 SSL 证书应由您在 trustManager() 中定义的同一 CA 签名。
正在使用服务主机名自动验证主机名。如果没有匹配java.security.cert.CertificateException: No subject alternative names present异常将被抛出。实际上,我找不到省略主机名验证的方法(不使用 省略整个 SSL 证书验证 .trustManager(InsecureTrustManagerFactory.INSTANCE))。
我已经在本地测试了这个解决方案。我的网络服务在我的本地机器上运行,但它的 SSL 证书只包含 DNS 名称,而不包含 IP 地址。因此,出于调试目的,我已将条目添加到主机文件并将我的服务 IP 映射到正确的 DNS 名称。
SslContext sslContext = SslContextBuilder
.forClient()
.trustManager(new FileInputStream(caPath))
.keyManager(
new FileInputStream(userCertPath),
new FileInputStream(userPrivateKeyPath),
userPrivateKeyPassword
)
.build();
HttpClient httpClient = HttpClient.create()
.secure(t -> t.sslContext(sslContext));
WebClient webClient = WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient))
.build();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
855 次 |
| 最近记录: |