Задача: посредством PHP подключиться к сокету по wss и передать данные. Если глобально, то нужна система уведомлений в реальном времени для пользователей сайта. Бэкэнд на PHP.
Обязательные условия: подключение с использованием сертификата от LetsEncrypt
Сервер: Ubuntu 16.04, PHP 7, Websocket сервер (socket.io или ws), OpenSSL включён, Файлы LetsEncrypt .crt/.ca/.pem
С сервером Websocket и подключением по wss клиента на js вопросов и проблем - нет. А вот с реализацией клиента на php проблема. Если сервер запускаю без SSL, то на php подключаюсь посредством stream_socket_client или fsockopen. Библиотеки пока никакие не пробовал, но гугление показало, что вопрос подключения по wss на PHP довольно частый. А полного ответа не встречалось. Единственные костыли, которые видел около этой темы - это проксирование. Помогите советом куда копать. Или стоит ли попробовать познакомится с Elephant и Ratchet (и есть рабочие примеры для wss)?
Пробовал на PHP stream_context_create + stream_socket_client c различными вариантами параметров, но уже запутался в них. Сейчас получаю или $errno = 0 или Bad Request 400.
$cert = 'путь к сертификату .ca или .pem';
$context = stream_context_create([ 'ssl' => [
'allow_self_signed' => false,
'verify_peer' => true,
'cafile' => $cert,
'local_cert' => 'путь к сертификату .crt',
'verify_depth' => 3,
'CN_match' => 'домен',
'disable_compression' => true,
'SNI_enabled' => true,
'ciphers' => $ciphers,
'SNI_server_name' => 'домен'
'capture_peer_cert' => true,
'cafile' => $cert,
'peer_name' => 'домен',
'ciphers' => $ciphers,
'disable_compression' => true,
]]);
$socket = stream_socket_client("ssl://домен:4444/web", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);