Ошибка при подключении к WSS сокетам с андроид с использованием OKHTTP

Запущен web-socket сервер через фреймворк workerman. При подключении через браузеры на JS все отлично работает

let ws = new WebSocket('wss://domain.com:30000');

Но при соединении с андроида через OKHTTP выводится сообщение об ошибке SSL handshake error: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:14094416:SSL routines:ssl3_read_bytes:sslv3 alert certificate unknown

Вот код на андроид

String WEP_URL = "wss://domain.com:30000";

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(WEP_URL).build();
SocketListener listener = new SocketListener();
WebSocket webSocket = client.newWebSocket(request, listener);

PHP

$context = array(
    'ssl' => array(
        'local_cert'  => __DIR__.'/ssl/cert.crt',
        'local_pk'    => __DIR__.'/ssl/key.key',
        'verify_peer' => false,
    )
);
$worker = new Worker("websocket://domain.com:30000", $context);
$worker->transport = 'ssl';

JS

let ws = new WebSocket('wss://domain.com:30000/');

Через браузеры подключение происходит без проблем, а через андроид сообщение о ошибке сертификата. Что тут не так?

P.S. код на JAVA писал не я...

Я так понял, что соединение с андроида приходит на ws а не wss, так как, если я подключаюсь к серверу с браузеров на JS вот так let ws = new WebSocket('ws://domain.com:30000/'); выводится такая же ошибка.


Ответы (1 шт):

Автор решения: Olmicron

Проблема в сертификатах.

На андроиде по умолчанию можно установить защищённое соединение только, если хост использует сертификат, выданный доверенным удостоверяющим центром. Самоподписанные сертификаты не прокатят.

Проверку можно "отключить", точнее просто принимать любой сертификат, или настроить как угодно...

Один из вариантов решения можно найти здесь.

→ Ссылка