Прочитав практически все статьи о том, как заставить реализацию веб-сокетов Ratchet PHP работать с SSL, я, наконец, убедился, что она работает с помощью множества советов, хотя в основном информация здесь https://github.com/ratchetphp/Ratchet/issues/489, который в основном изменяет способ создания IoServer для использования React Secure Server. Моя реализация на сервере PHP выглядит так:
$loop = \React\EventLoop\Factory::create();
$secure_websockets = new \React\Socket\Server('0.0.0.0:8080', $loop);
$secure_websockets = new \React\Socket\SecureServer($secure_websockets, $loop, [
'local_cert' => '/path/to/letsencyrpt/cert.crt',
'local_pk' => '/path/to/letsencyrpt/key.key',
'verify_peer' => false
]);
$app = new \Ratchet\Http\HttpServer(
new \Ratchet\WebSocket\WsServer(
new Chat()
)
);
$server = new \Ratchet\Server\IoServer($app, $secure_websockets, $loop);
$server->run();
А на стороне клиента Javascript:
function startWebsocket() {
var conn = new WebSocket('wss://domain.com:port');
conn.onopen = function(e) {
console.log("Connection established!");
};
}
startWebsocket();
И это отлично работает.
НО ... Я использую сертификаты Let's Encrypt на сервере, и у них довольно короткий срок службы. Это нормально для https, поскольку хост (Siteground) автоматически обновляет SSL до истечения срока действия, но если я помещаю путь к указанной паре c Cert / Key (как указано выше), срок их действия истечет.
Итак, у меня есть варианты:
A: Поместите повторяющуюся заметку в мой календарь, чтобы напоминать мне обновлять пути Cert / Key каждые 3 месяца и жить с этим, или ... B: Есть ли способ узнать текущую пару Cert / Key и добавить ее как переменную? 1031 * доступ (я по глупости подписался на 'Geeky Features' годы go, прежде чем мои технические знания улучшились настолько, чтобы мне понадобилось root).
Хотя у меня нет root, он фактически является выделенным сервером, поэтому я могу попросить ребят из службы поддержки Siteground что-то изменить для меня, но мне действительно нужно быть очень конкретным c с любыми запросами. Пробовать что-то здесь, вероятно, не вариант. Я исследовал другой метод получения wss: работая с Ratchet, а именно проксирование https-запроса на порт ws. Не очень далеко ушел с этим, поскольку установленная версия Apache кажется недостаточно свежей, чтобы поддерживать туннель, и хотя есть ссылки на NGINX, работающий параллельно с Apache на Siteground, я просто оставил получаю ошибку каждый раз, когда я пытался использовать его для прокси. Не помогло и то, что без доступа root я довольно ограничен в том, что могу сделать.