我使用 php React 和 Ratchet 创建了一个 PHP 安全 websocket (wss) 服务器。我只有一个自签名证书,因为我目前只是尝试将我的服务器用作应用程序的后端,所以我不需要域名,因为它仅供应用程序访问,而不是供人们访问直接,因此必须为此订阅域名似乎是浪费金钱,而且在获得受信任的 ssl 证书之前我需要一个域名,无论如何我拥有服务器。话虽如此,这是我的代码
安全套接字server.php:
<?php
use 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”
饮歌长啸