【问题标题】:How to use SNI with Spring WebSocketClient?如何将 SNI 与 Spring WebSocketClient 一起使用?
【发布时间】:2019-08-14 03:48:26
【问题描述】:

我需要连接到支持 SNI 的 spring websocket 服务器。我使用的是 Spring WebSocket Client,它默认不发送 SNI 扩展,因为 jdk 1.8.0 默认不发送 SNI 扩展。

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

java的官方文档建议使用SSLParameters添加SNI Matcher并将SSLParameters设置为SSLSocket,然后再使用该SSLSocket进行任何HttpsUrlConnection。

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);

【问题讨论】:

  • 您好,您找到解决此问题的方法了吗?我也面临同样的问题。

标签: java tomcat spring-websocket stomp sni


【解决方案1】:

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

所以我不得不使用这个link 作为参考来强制请求SNI 信息。但是没有找到使用 spring standadrd wensocket 客户端执行此操作的方法。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-17
    • 2013-04-15
    • 2021-08-27
    • 2011-05-26
    • 2012-05-10
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多