Как использовать SNI с Spring WebSocketClient? - PullRequest
2 голосов
/ 23 марта 2019

Мне нужно подключиться к весеннему серверу websocket, который поддерживает SNI.Я использую Spring WebSocket Client, который по умолчанию не отправляет расширение SNI, поскольку jdk 1.8.0 по умолчанию не отправляет расширение SNI.

Расширенное имя_сервера (расширение SNI) не отправляется с jdk1.8.0, но отправляетсяс jdk1.7.0

Официальная документация java предлагает добавить SNI Matcher с SSLParameters и установить SSLParameters на SSLSocket перед выполнением любого HttpsUrlConnection с этим SSLSocket.

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

Есть ли способ установить это свойство с помощью Spring WebSocket Client?

Существуют некоторые свойства ClientEndpointCongfig, которые можно установить по данной ссылке, но я не нашел ни одного свойства, которое можно использовать для установки SSLSocketили SSLSocketfactory с клиентом веб-сокета Spring.

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

Вот пример кода для клиента веб-сокета Spring:

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

1 Ответ

0 голосов
/ 17 июня 2019

Я тоже столкнулся с этой проблемой.В моем случае я получал неправильный сертификат от кластера EKS, потому что у меня настроено несколько имен хостов для одного IP.

Так что мне пришлось использовать эту ссылку в качестве ссылки для принудительной установки информации SNI при помощизапрос.Однако я не нашел способа сделать это с помощью весеннего стандартного клиента wensocket.

Я использовал этот ( ссылка ) клиент веб-сокета для решения этой проблемы.В основном мне пришлось предоставить обертку фабрики сокетов сверху ссылку на клиент websocket.

Что-то вроде: SSLSocketFactory factory = new SSLSocketFactoryWrapper(sslContext, sslParameters); webSocket.setSocketFactory(factory);

...