gpt4 book ai didi

java - Spring Webflux WebClient - 指定发送出站请求时使用的 TLS 版本(介于 TLSv1.2 和 TLSv1.3 之间)

转载 作者:行者123 更新时间:2023-12-04 22:38:42 24 4
gpt4 key购买 nike

关于 Spring Webflux 的 Spring WebClient 的小问题,以及在发送出站 http 请求(我是客户端)时如何配置 TLS 版本。
在 SpringBoot MVC 项目(不是 Webflux)中,我使用的是 Webflux Webclient(可以将两者混合使用)。
我正在使用客户端调用两个我完全无法控制的外部方 HTTP 服务器。
第一个服务是 AliceService。 Alice 服务配置为仅接受 TLSv1.2 的请求
第二个服务是 BobService。 Bob 服务配置为仅接受 TLSV1.3 的请求
因此,我目前面临一个问题。我永远无法同时给他们两个打电话。
我尝试了不同的组合

-Djdk.tls.client.protocols=TLSv1.2
-Djdk.tls.client.protocols=TLSv1.3

server.ssl.enabled-protocols=TLSv1.2
server.ssl.enabled-protocols=TLSv1.3
每次,我都会将所有出站请求更改为 TLSv1.2(因此仅接受 TLSv1.3 的服务将失败)或将所有出站调用更改为 TLSv1.3(因此仅接受 TLSv1.2 的服务将失败)。
我什至有两个不同的 WebClient 实例。
请问发送出站请求时如何配置使用哪个TLS版本?
请问如何解决这个问题?
谢谢

最佳答案

为此,您可以创建两个单独的 Web 客户端。一个用于 TLSv1.2,一个用于 TLSv1.3。
这是您可以用来构建 WebClient 以及您需要的其他配置的最小代码片段。
用于 TLSv1.2 的 WebClient

    final SslContext sslContextForTls12 = SslContextBuilder.forClient()
.protocols("TLSv1.2")
.build();

final HttpClient httpClientForTls12 = HttpClient.create()
.secure(ssl -> ssl.sslContext(sslContextForTls12));

final WebClient webClientForTls12 = WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClientForTls12))
.build();
用于 TLSv1.3 的 WebClient
    final SslContext sslContextForTls13 = SslContextBuilder.forClient()
.protocols("TLSv1.3")
.build();

final HttpClient httpClientForTls13 = HttpClient.create()
.secure(ssl -> ssl.sslContext(sslContextForTls13));

final WebClient webClientForTls13 = WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClientForTls13))
.build();
我已经为支持各种 TLS 版本的网站测试了此配置。
This answer提到了我用于测试的网站列表。

关于java - Spring Webflux WebClient - 指定发送出站请求时使用的 TLS 版本(介于 TLSv1.2 和 TLSv1.3 之间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67132280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com