@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. Как можно решить данную проблему ?
  • Вопрос задан
  • 218 просмотров
Решения вопроса 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.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 90 000 до 140 000 руб.
Babyblog.ru Москва
от 50 000 до 80 000 руб.
Aitarget Москва
от 100 000 руб.
20 апр. 2019, в 16:31
500 руб./в час
20 апр. 2019, в 15:00
10000 руб./за проект
20 апр. 2019, в 14:48
30000 руб./за проект