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

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

Похожие вопросы