【问题标题】:WebSocket error: net::ERR_SSL_PROTOCOL_ERRORWebSocket 错误:net::ERR_SSL_PROTOCOL_ERROR
【发布时间】:2020-04-19 21:55:46
【问题描述】:

我刚刚使用 Let's Encrypt SSL 证书(非自签名)在本地服务器(Xampp 环境,Windows)上创建了一个 PHP Web 服务器,因此我的网站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

我在建立连接时收到错误 net::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('');
        };
});

【问题讨论】:

标签: php ssl https websocket xampp


【解决方案1】:

您正在尝试为 ws://wss:// 使用相同的端口 (8090) - 这很可能不起作用。虽然您没有显示任何服务器端配置,但我怀疑您在端口 8090 上的 websocket 服务器只能执行普通 WebSockets(即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 to reverse proxy websockets AND enable SSL (wss://)?WebSocket through SSL with Apache reverse proxy 了解如何设置此类内容。

【讨论】:

  • 你做了什么?
猜你喜欢
  • 1970-01-01
  • 2022-06-30
  • 1970-01-01
  • 2013-04-14
  • 2020-11-18
  • 2016-04-20
  • 2020-07-20
  • 2020-11-22
  • 1970-01-01
相关资源
最近更新 更多