如何以编程方式为Tyrus WebSocket @ServerEndpoint启用WSS

时间:2018-12-19 10:46:42

标签: ssl websocket server tyrus

我有一个具有REST端点和WebSocket端点的微服务。

它通过弹簧连接Grizzly和Tyrus,并使用JAX-RS过滤器和ServerEndpointConfig.Configurator通过SSO添加身份验证。我已使用SSLContextConfigurator和SSLEngineConfigurator以及(当前)自签名证书将SSL添加到REST端点。

在Tyrus 1.14中,我看不到对org.glassfish.tyrus.server.Server做同样的事情。

实际上,该代码对协议名称进行了严格的布线,这使我想知道这是否可能:

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

存在类似的问题here,但它需要将WAR文件部署到完整的Glassfish实例。我想以编程方式执行此操作。

2 个答案:

答案 0 :(得分:0)

使用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并带有密钥库字节[]和密码的地方。

答案 1 :(得分:0)

我设法通过上面的变体使它开始工作。但是,我强烈建议不要这样做,因为它的性能很差。与Tyrus或Grizzly无关,而与Java无关。众所周知,Java中的SSL库运行缓慢,并且由于Grizzly使用Java,因此任何WSS都将受到影响。

显然,Jetty和Tomcat提供了一种使用OpenSSL而不是标准Java SSL的方法。另外,也可以使用处理SSL的SSL终结器(例如Apache Web服务器或HAProxy),并将标准WS连接传递到服务器