Tomcat安全Websocket

时间:2015-07-24 08:47:52

标签: sockets tomcat ssl https websocket

我在Tomcat 8上通过TLS获取WebSocket连接时遇到了麻烦。

我已设置以下连接器:

<Connector  port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="8443"
/>

<Connector  port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
            maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
            clientAuth="false" sslProtocol="TLS"
            keystorefile="${user.home}/.keystore" keystorePass="password"
/>

在名为&#34; socket&#34;的标准Tomcat servlet中。我在类上使用了@ServerEndpoint注释来创建WebSocket端点。因此,删节版本如下所示:

@ServerEndpoint(value = "/echo")
public class EchoServer {
    @OnOpen
    public void onOpen(Session session) {
        //
    }

    @OnMessage
    public void onMessage(String message, Session session) {
        //
    }

    @OnClose
    public void onClose(Session session) {
        //
    }
}

在我的客户端,我有一个连接WebSocket的HTML脚本:

var webSocket = new WebSocket("ws://localhost:8080/socket/echo");

当我连接到http://localhost:8080/socket时,一切正常。我可以打开套接字连接并来回传递消息。

使用https://localhost:8443/socket我可以连接到servlet,但我无法打开套接字连接,因为这是一个不安全的操作。然后我尝试将连接字符串更改为:

var webSocket = new WebSocket("wss://localhost:8443/socket/echo");

但是像这样,我无法建立任何联系。

当我查看Tomcat文档(https://tomcat.apache.org/tomcat-8.0-doc/web-socket-howto.html)时,我不明白我需要改变什么 - 我看到一些提及SSL_CONTEXT之类的东西,但我找不到任何一个如何使用它的例子(我有无论如何都没有ClientEndpointConfig,因为那是浏览器?)。

有人能指出我的解决方案吗? 为什么http端口上的连接正常工作在https端口不起作用?

0 个答案:

没有答案