首页 > 解决方案 > 使用 Ratchet PHP 在 websocket 服务器中处理过期的 Let's Encyrpt SSL

问题描述

在阅读了几乎所有关于让 Websockets 的 Ratchet PHP 实现与 SSL 一起工作的文章之后,我终于在许多技巧的帮助下让它工作了,尽管主要是这里的信息https://github.com/ratchetphp/Ratchet/ issues/489基本上修改了您创建 IoServer 以使用 React 的安全服务器的方式。我在服务器端的 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,但如果我放置一个特定证书/密钥对的路径(如上所述),它们就会过期。

所以,我的选择是:

A:在我的日历中重复记录以提醒我每 3 个月更新一次证书/密钥路径并使用它,或者.. B:有没有办法发现当前的证书/密钥对并将其作为多变的?

需要记住的一些事项:

标签: phpsslwebsocketlets-encryptratchet

解决方案


推荐阅读