gpt4 book ai didi

php - Ratchet Websockets over WSS on iis8

转载 作者:行者123 更新时间:2023-12-04 16:13:09 25 4
gpt4 key购买 nike

花了很多时间寻找答案,但似乎没有明确的答案。
我在 IIS8 上设置并运行了 Ratchet websockets,这在 ws://本地和远程都运行良好。我现在想实现 wss://但我无法让它工作。
我尝试了两种不同的方法,首先在 react 上启用 wss,如下所示:

$loop = React\EventLoop\Factory::create();
$webSock = new React\Socket\Server('0.0.0.0:2000', $loop);
$webSock = new React\Socket\SecureServer($webSock, $loop, [
'local_cert' => 'C:/ssl/cert.crt', // path to your cert
'local_pk' => 'C:/ssl/cert_d.key', //path to your server private key
'allow_self_signed' => FALSE, // Allow self signed certs (should be false in production)
'verify_peer' => FALSE
]);
$webServer = new Ratchet\Server\IoServer(
new Ratchet\Http\HttpServer(
new Ratchet\WebSocket\WsServer(
new Chat()
)
),
$webSock, $loop
);
$webServer->run();
当我尝试从客户端连接时,使用它会使 php_cli 崩溃。
我的第二种方法是使用 IIS 重写,并将以下内容添加到 web.config
<rule name="WebSocketTestRule" enabled="true" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{CACHE_URL}" pattern="^wss://" />
</conditions>
<action type="Rewrite" url="ws://localhost:2000/" />
</rule>
据我所知,这应该将 wss://地址上的所有内容重写为 ws://localhost:2000/。我在 IIS 上安装了 WebSockets。
但这只是给了我以下错误 WebSocket connection to 'wss://[domain.name]/' failed: HTTP Authentication failed; no valid credentials available .
哪个是在 IIS 8 上实现 WSS://的最佳方法。它甚至可能吗?
如何调试这些问题?例如,我如何测试证书是否正常?
如果有人可以帮助我指出正确的方向,希望这个问题将来可以帮助其他人。

最佳答案

好的,所以我坚持重写并让它工作。这就是我所做的。

  • 在 IIS 服务器上,确保将 Websockets 作为 Windows 功能安装。
  • 创建一个新的网站文件夹(例如 wssproxy)
  • 确保对该文件夹的访问权限正确。这是我绊倒的地方。我将此文件夹的身份验证方法更改为“匿名身份验证”,并将匿名用户身份指定为“应用程序池身份”
  • 为创建的文件夹添加重写规则(我的本地服务器端口是 2000)
  • <configuration>
    <system.webServer>
    <rewrite>
    <rules>
    <rule name="Rewrite ssl to non-ssl" enabled="true" stopProcessing="true">
    <match url="(.*)" />
    <action type="Rewrite" url="{MapProtocol:{C:1}}://127.0.0.1:2000/" />
    <conditions>
    <add input="{CACHE_URL}" pattern="^(.+)://" />
    </conditions>
    </rule>
    </rules>
    <rewriteMaps>
    <rewriteMap name="MapProtocol">
    <add key="wss" value="ws" />
    <add key="https" value="http" />
    </rewriteMap>
    </rewriteMaps>
    </rewrite>
    </system.webServer>
    </configuration>
  • 在客户端(在我的情况下是 JS)上,包括尾随的“/”
  • var conn = new WebSocket('wss://domain.com/wssproxy/'); 
  • 不太确定它的安全性,所以我在 Ratchet 服务器中添加了“Origin Check”。
  • $allowed_origins = array('localhost');
    $ws = new WsServer(new Chat());
    $checkOrigin = new OriginCheck($ws, $allowed_origins);
    $checkOrigin->allowedOrigins[] = 'domain.com';
    $server = IoServer::factory( new HttpServer($checkOrigin), 2000 );
    $server->run();
    在那之后一切都在工作。如果有人可以指出此配置的任何明显安全问题,那将很有帮助。

    关于php - Ratchet Websockets over WSS on iis8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64931527/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com