为了账号安全,请及时绑定邮箱和手机立即绑定

Wss Webserver 无法使用自签名密钥正常工作

Wss Webserver 无法使用自签名密钥正常工作

PHP
回首忆惘然 2021-11-26 19:35:20
我使用 php React 和 Ratchet 创建了一个 PHP 安全 websocket (wss) 服务器。我只有一个自签名证书,因为我目前只是尝试将我的服务器用作应用程序的后端,所以我不需要域名,因为它仅供应用程序访问,而不是供人们访问直接,因此必须为此订阅域名似乎是浪费金钱,而且在获得受信任的 ssl 证书之前我需要一个域名,无论如何我拥有服务器。话虽如此,这是我的代码安全套接字server.php:<?phpuse React\Socket\SecureServer;require dirname(__DIR__) . '/vendor/autoload.php';require 'Pool.php';$loop = React\EventLoop\Factory::create();$webSock = new React\Socket\Server('0.0.0.0:<my_port>', $loop);$webSock = new React\Socket\SecureServer($webSock, $loop, [    'local_cert'        => '<my_ssl_cert_path>.pem',    'local_pk'          => '<my_ssl_cert_key>.key',    'allow_self_signed' => TRUE,    'verify_peer' => TRUE,    'allow_self_signed' => TRUE]);$webServer = new Ratchet\Server\IoServer(    new Ratchet\Http\HttpServer(        new Ratchet\WebSocket\WsServer(            new Pool()        )    ),    $webSock,    $loop);$webServer->run();我跑php secure-web-socket.php我尝试从 Android 连接到它,但出现“握手失败”另外,当我跑./testssl.sh <my_host_ip>:<my_port>我得到:<my_host_ip>:<my_port> doesn't seem to be a TLS/SSL enabled server如果我使用: ./testssl.sh <my_host_ip>:443我实际上得到的结果表明它是一个启用了 TLS/SSL 的服务器。在我的 nginx 文件中,我有:server {        listen 80 default_server;        listen [::]:80 default_server;        # SSL configuration        #        listen 443 ssl default_server;        listen [::]:443 ssl default_server;        include snippets/<my_certificate_config_file>.conf;        root /usr/share/nginx/html;        # Add index.php to the list if you are using PHP        index index.php index.html index.htm index.nginx-debian.html;并重新启动了 nginx,但这导致我在https://my_host_ip/下的网页无法连接。而且,加上该解决方案,即使它有效,也只允许我在一个端口上安全地运行我的套接字服务器,而不是任何可用的端口。我如何让这个工作?更新:我通过了这些问题,但现在正在处理 android 得到“预期 101,收到:500”
查看完整描述

1 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

所以,我设法让它一切正常。首先,对于握手失败的部分,我可能有错误的路径:

 'local_cert'        => '<my_ssl_cert_path>.pem', 
 'local_pk'          => '<my_ssl_cert_key>.key',

因为我创建了一个新的证书和密钥并使用了它们,并且我在 android 客户端使用的tech.gusavila92.websocketclient.WebSocketClient ` 类中通过了“握手失败”错误。

在那之后,我在 WebSocket 类中出现了“预期 101,得到 500”错误。我做了一些挖掘,发现这是因为我不能使用new WebSocketClient("wss://ip-address:port");,但我必须使用new WebSocketClient("wss://ip-address:port/");,注意额外的斜线。

这是理由。显然头的第一行是使用“GET raw_url 1.1”构建的,如果没有斜线,则会得到“GET HTTP/1.1”,但 PHP Guzzle 想要看到“GET / HTTP/1.1”,而不是“ GET HTTP/1.1",或者在解析标头时抛出异常。在这种情况下,raw_url 是 :port 之后的所有内容,所以如果你不加“/”,你会得到一个空白的 raw_url,所以你会得到“GET HTTP/1.1”,但是如果你在后面加一个斜杠,你会得到“GET / HTTP/1.1"


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 370 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信