Websocket握手。从ws到wss

时间:2016-02-07 13:56:07

标签: javascript java ssl https websocket

我正在开发应用程序已有一段时间了,最​​近我在应用程序上附加了SSL证书(它不是自签名的;它是由Comodo签名的,所以这里不会出现问题)。我很久以前在我的Java Glassfish服务器上实现了一个WebSocket端点,我正在使用它与javascript。我一直在通过http成功使用WebSocket,直到现在,我转移到https。

让我们看一下我使用的代码片段:

服务器端点:

@ServerEndpoint(value = "/ws/chat", 
    encoders = ChatMessageEncoder.class, 
    decoders = ChatMessageDecoder.class)
public class ChatEndpoint {

@OnOpen
public void open(final Session session) {
    // stuff happenin'
}

@OnMessage
public void onMessage(final Session session) {
    // stuff happenin'    }

@OnError
public void onError(Throwable t) {
    t.printStackTrace();
    System.out.println("error");
}

@OnClose
public void onClose() {
}
}

客户端连接:

var wsocketPrivate;
function connectToChatserver() {
    var serviceLocation = 'wss://<ip>:8080/ws/chat';
    $rootScope.wsocketPrivate = new WebSocket(serviceLocation);
    $rootScope.wsocketPrivate.onmessage = onMessageReceived;
};
function onMessageReceived(evt) {
    console.log(evt)
};
connectToChatserver();

没有激活ssl证书并使用var serviceLocation = 'ws://<ip>:8080/ws/chat';(ws而不是wss)完全正常。当我转移到https时,它要求wss(浏览器阻止了我的握手,因为它不安全)并转向wss,发生以下错误:

WebSocket connection to 'wss://<ip>:8080/ws/chat' failed: Error in connection establishment: net::ERR_TIMED_OUT

我做错了什么?你能建议一些测试来了解更多信息吗?

谢谢你, 米哈伊

1 个答案:

答案 0 :(得分:1)

我终于找到了问题所在。我使用nginx前端服务器作为代理。该服务器的默认配置是因为一些奇怪的原因阻止了我的wss。