Потратил много часов на поиски ответа, но, похоже, нет однозначного ответа. У меня настроены и запущены веб-узлы с храповым механизмом на IIS8, и это отлично работает через ws: // как локально, так и удаленно. Теперь я хотел бы реализовать wss: //, но я просто не могу заставить его работать.
Я пробовал два разных подхода, во-первых, включив 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 /. Я установил WebSockets на IIS. Но это дает мне следующую ошибку WebSocket connection to 'wss://[domain.name]/' failed: HTTP Authentication failed; no valid credentials available
.
Как лучше всего реализовать WSS: // на IIS 8. Возможно ли это вообще? Как мне отладить эти проблемы? Например, как проверить, все ли в порядке с сертификатами? Если бы кто-то мог помочь указать мне в правильном направлении, и, надеюсь, этот вопрос может помочь кому-то еще в будущем.