@YourQuestion

Как настроить Workerman для wss соединения?

Используется php 7.1
В доках есть код:
$context = array(
    'ssl' => array(
        'local_cert'  => '/your/path/of/server.pem',
        'local_pk'    => '/your/path/of/server.key',
        'verify_peer' => false,
    )
);

// Create a Websocket server with ssl context.
$ws_worker = new Worker("websocket://0.0.0.0:2346", $context);


На моем домене стоит сертификат Lets Encrypt и при генерации были созданы:
- *server.ca
- *server.crt - сертификат в формате PEM
- *server.crta - цепочка сертификатов в формате PEM
- *server.key - private key

я прописал свои пути до сертификатов:

'local_cert'  => '/my_path/server.crt',
'local_pk'    => '/my_path/server.key',


cервер запустился нормально, но при обращении к нему получаю ошибку:

file.html:2 WebSocket connection to 'wss://ip.ip.ip.ip:2020/' failed: Error in connection establishment: net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH


В консоли сервера, в debug, выходит ошибка:
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 an SSL certifi
cate (local_cert context option)


По ошибке можно подумать, что файл ssl не найден, однако пути правильные.

Попробовал сделать по примеру Почему не работает Workerman для wss соединения?
'local_cert'  => __DIR__.'/server.pem',
'local_pk'    => __DIR__.'/server.key',


но ошибка сохраняется...

Подскажите:
1. В local_cert указывается сертификат в формате pem (в моем случае .ctr) или цепочка сертификатов (в моем случае .crta) ?
2. Как можно решить данную проблему ?
  • Вопрос задан
  • 3052 просмотра
Решения вопроса 1
@YourQuestion Автор вопроса
Проблему решил так:
$context = array(
    'ssl' => array(
        'local_cert'  => 'ssl/server.crt',
        'local_pk'    => 'ssl/server.key',
        'verify_peer' => false,
    )
);

// Create a Websocket server with ssl context.
$ws_worker = new Worker("websocket://domain.com:2346", $context);


1. В директории со скриптом запуска сервера websocket (start.php) создал папку ssl где создал линки server.crt и server.key к реальным файлам сертификата и прописал путь к ним без __DIR__, через __DIR__ почему-то не работало.
2. В строке js
$ws_worker = new Worker("websocket://domain.com:2346", $context);
прописал доменное имя вместо ip.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 19:22
18000 руб./за проект
25 апр. 2024, в 19:21
10000 руб./за проект
25 апр. 2024, в 18:47
2795100 руб./за проект