gpt4 book ai didi

java - 如何在 Spring WebSocketClient 中使用 SNI?

转载 作者:行者123 更新时间:2023-11-30 12:06:50 24 4
gpt4 key购买 nike

我需要连接到支持 SNI 的 spring websocket 服务器。我正在使用默认情况下不发送 SNI 扩展的 Spring WebSocket 客户端,因为 jdk 1.8.0 默认不发送 SNI 扩展。

Extended server_name (SNI Extension) not sent with jdk1.8.0 but send with jdk1.7.0

java 的官方文档建议在使用 SSLSocket 进行任何 HttpsUrlConnection 之前添加带有 SSLParameters 的 SNI Matcher 并将 SSLParameters 设置为 SSLSocket。

https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#SNIExtension

有没有办法用 Spring WebSocket Client 设置这个属性?

可以根据给定链接设置一些 ClientEndpointCongfig 属性,但我没有找到任何可用于通过 Spring websocket 客户端设置 SSLSocket 或 SSLSocketfactory 的属性。

https://tomcat.apache.org/tomcat-8.5-doc/web-socket-howto.html

这是 Spring websocket 客户端的示例代码:

List<Transport> transports = new ArrayList<>(1);
StandardWebSocketClient standardWebSocketClient = new StandardWebSocketClient();
transports.add(new WebSocketTransport( standardWebSocketClient) );
WebSocketClient transport = new SockJsClient(transports);
WebSocketStompClient stompClient = new WebSocketStompClient(transport);
StompSessionHandler sessionHandler = new MyStompSessionHandler();
stompClient.connect(URL, sessionHandler);

最佳答案

我也遇到了这个问题。在我的例子中,我从 EKS 集群获得了错误的证书,因为我为单个 IP 配置了多个主机名。

所以我不得不使用这个 link作为强制 SNI 信息与请求的引用。但是没有找到用 spring standadrd wensocket 客户端做到这一点的方法。

我已经使用这个 ( link) websocket 客户端来解决这个问题。基本上我必须从上面的链接提供套接字工厂包装器到 websocket 客户端。

类似的东西:SSLSocketFactory 工厂 = new SSLSocketFactoryWrapper(sslContext, sslParameters);
webSocket.setSocketFactory(工厂);

关于java - 如何在 Spring WebSocketClient 中使用 SNI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55311784/

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