Проблема в одной какой то маленькой детали, но какой конкретно не допираю вообще
есть вебсокет сервер workerman php, код такой, самый простой:
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
$ws_worker = new Worker("websocket://0.0.0.0:2346");
// Указываем путь к SSL сертификату и ключу
$ws_worker->transport = 'ssl';
$ws_worker->ssl = [
'local_cert' => '/etc/letsencrypt/live/domain.com/fullchain.pem',
'local_pk' => '/etc/letsencrypt/live/domain.com/privkey.pem',
'verify_peer' => false
];
$ws_worker->onConnect = function($connection) {
echo "New connection\n";
};
$ws_worker->onMessage = function($connection, $data) {
// Отправляем обратно то же сообщение
$connection->send("Received: " . $data);
};
// Устанавливаем обработчик для отключений
$ws_worker->onClose = function($connection) {
echo "Connection closed\n";
};
// Запускаем сервер
Worker::runAll();
как видно чтоб работало через wss, указал путь к файлам ssl
далее конфиг nginx:
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
location /ws {
proxy_pass https://127.0.0.1:2346; # Порт, на котором работает ваш WebSocket сервер
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
вебсервак выдает при подключении клиента (const socket = new WebSocket('
wss://domain.com/ws')) в терминале:
SSL handshake error: stream_socket_enable_crypto():
SSL_R_NO_SHARED_CIPHER: no suitable shared cipher could be used. This could be because the server is missing a SSL certificate (local_cert context option)
рассматривал так же и решения по такому же вопросу который задавался другими пользователями хабры:
Почему не работает Workerman для wss соединения?
Как настроить Workerman для wss соединения?
- ложил файлы сертификата в корень домена
- повышал привелегии для файлов сертификата
- указывал в инициализации класса воркерамена домен:
$ws_worker = new Worker("websocket://domain.com:2346");
но ошибка всегда одна и та же