Как программно включить WSS для Tyrus WebSocket @ServerEndpoint

У меня есть микросервис с конечной точкой REST и конечной точкой WebSocket.

Он Spring связывает Grizzly и Tyrus и добавляет аутентификацию через SSO с использованием фильтра JAX-RS и ServerEndpointConfig.Configurator. Я добавил SSL к конечной точке REST с помощью SSLContextConfigurator и SSLEngineConfigurator и (в настоящее время) самозаверяющего сертификата.

Я не вижу способа сделать то же самое для org.glassfish.tyrus.server.Server в Tyrus 1.14.

Фактически, код жестко привязан к имени протокола, что заставляет меня задаться вопросом, возможно ли это вообще:

LOGGER.info("WebSocket Registered apps: URLs all start with ws://" + this.hostName + ":" + this.getPort());

Аналогичный вопрос есть здесь, но для этого требуется развертывание файла WAR в полноценном экземпляре Glassfish. Я хочу сделать это программно.


person PEELY    schedule 19.12.2018    source источник


Ответы (2)


Решено с использованием предложения на https://stackoverflow.com/a/27239122/17641

listener = new NetworkListener("grizzly", "0.0.0.0", port); listener.setSecure(true); listener.setSSLEngineConfig(new SSLEngineConfigurator(getSslContextConfigurator()).setClientMode(false).setNeedClientAuth(false));

Где getSslContextConfigurator создает org.glassfish.grizzly.ssl.SSLContextConfigurator с байтом [] хранилища ключей и паролем.

person PEELY    schedule 20.12.2018
comment
Как мне использовать это с org.glassfish.tyrus.server.Server? Я пытаюсь изменить конечную точку своего сервера websocket с ws:// на wss://, но не знаю, как использовать ваше решение с моим экземпляром Server. - person Jase; 05.05.2020
comment
Также в настоящее время борюсь с этим. Мы будем очень признательны за некоторую проработку и контекст, как это настроить! - person Wolfone; 28.07.2020

Мне удалось заставить это работать, используя вариант выше. Однако я настоятельно не рекомендую это делать, так как производительность ужасна. Это не связано с Tyrus или Grizzly, это связано с Java. Библиотека SSL в Java, как известно, работает медленно, а поскольку Grizzly использует Java, это может повлиять на любой WSS.

Очевидно, Jetty и Tomcat предоставляют возможность использовать OpenSSL вместо стандартного Java SSL. В качестве альтернативы используйте терминатор SSL (например, веб-сервер Apache или HAProxy), который работает с SSL и передает стандартное соединение WS на ваш сервер.

person user2430147    schedule 18.11.2020