WebSocket error: net::ERR_SSL_PROTOCOL_ERROR



我刚刚在本地服务器(Xampp环境,Windows(上创建了一个PHP Web服务器,使用Let's Encrypt SSL证书(非自签名(,所以我的网站 https://example.it 看起来像每个浏览器的有效证书。 我可以使用 http://导航到它,也可以使用标准端口导航到 https://。

现在我正在实现用于创建网络聊天的 php 套接字,但是如果我通过 HTTP 使用不安全的网络套接字协议:

ws://example.it:8090/chat/php-socket.php

它有效。

如果我通过HTTPS使用安全的Web套接字协议:

wss://example.it:8090/chat/php-socket.php

我在建立连接网络时收到错误::ERR_SSL_PROTOCOL_ERROR

如果有人需要,这是我的代码:

$(document).ready(function(){
var websocket = new WebSocket("wss://example.it:8090/chat/php-socket.php");
websocket.onopen = function(event) {
showMessage("<div class='chat-connection-ack'>Connssione stabilita.</div>");
}
websocket.onmessage = function(event) {
var Data = JSON.parse(event.data);
console.log(Data);
showMessage("<div class='"+Data.message_type+"'>"+Data.message+"</div>");
$('#chat-message').val('');
};
});

您正在尝试对ws://wss://使用相同的端口(8090( - 这很可能不起作用。虽然您没有显示任何服务器端配置,但我怀疑端口 8090 上的 websocket 服务器只能执行普通的 WebSocket(即ws://而不是wss://(,并且您希望来自HTTP服务器(端口443(的TLS也神奇地应用于端口8090上的wss://。事实并非如此。通过尝试使用端口 8090 进行wss://,您将尝试与不使用 TLS 的服务器进行 TLS 握手,从而导致net::ERR_SSL_PROTOCOL_ERROR

常见的设置是使用像nginx或Apache这样的Web服务器作为websocket服务器的反向代理,并在Web服务器上终止TLS。这样,ws://wss://都可以从外部在标准端口(即 80 和 443(上工作,并且端口 8090 上的互联网普通 websocket 服务器将无法从外部访问。例如,请参阅NGINX以反向代理Websockets并启用SSL(wss://(?或通过带有Apache反向代理的SSL的WebSocket,了解如何设置这样的东西。

最新更新