WebSocket握手。从ws到wss。

5

我正在开发一个应用程序,最近我为应用程序附加了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(浏览器阻止我的ws握手因为它不安全),切换到wss后,出现以下错误:

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

我做错了什么?你能建议一些测试来获取更多信息吗?
谢谢, Mihai

你解决了吗?我也卡在这里了。 - mhdjazmati
是的,检查答案。 - ashcrok
1个回答

1

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


1
我也遇到了同样的问题,你能否告诉我在nginx服务器配置文件中添加了哪些额外的配置? - Nazir Ahmed
如果我能让Tyrus在程序中执行SSL,我预见我也会遇到这个问题。那么配置更改是什么? - PEELY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接