Невозможно создать соединение WSS с Chrome, другой браузер работает - PullRequest
0 голосов
/ 11 июля 2020

Уже почти два года Google Chrome больше не поддерживает SSL через веб-сокет. Теперь я не знаю, в чем на самом деле их проблема, кроме того, что я слышал, что они переписали свои протоколы WS через SSL .. И, похоже, я использую IO :: Socket :: SSL. Интересно, знаете ли вы, ребята, об этом. мой пример сайта - это бот ir c, работающий с хоста HTTPS через соединение javascript через WSS. https://lichtsnel.nl.

Он работал годами, но, поскольку Google явно изменил свои процедуры, Chrome - единственный браузер, в котором он все еще не работает. И мне интересно, заметили ли вы это, ребята. Я написал клиент-серверную библиотеку с использованием IO :: Socket :: SSL для всего, что связано с SSL. По HTTPS работает отлично, но для WSS что-то меняется. И они не исправили это .. И это, хотя они, вероятно, заставляют новый стандарт для слоев HTTPS. А без работающего слоя WSS chrome становится действительно бесполезным .. И я вынужден вернуться к http / ws. Осталось намного меньше функциональности.

Не уверен, насколько активно эти модули обновляются, я мог бы обновить их в последнее время, но все же, удачи, и если у вас есть какая-либо информация об их изменениях в их протоколах. Итак, я отправляю письмо, чтобы узнать, можем ли мы ожидать, что обновления, заставляющие chrome снова работать.

С уважением, OnEhIppY Domero.

Это код на стороне сервера в perl:

# SSL
my $sslerr=0;
if ($self->{ssl}) {
  IO::Socket::SSL->start_SSL($client,
    SSL_server => 1,
    SSL_verify_mode => SSL_VERIFY_PEER,
    SSL_cert_file => $self->{sslcert},
    SSL_key_file => $self->{sslkey},
    SSL_ca_file => $self->{sslca},
    Listen => 128
  ) or $sslerr=1;
  if ($sslerr) { print STDOUT prtm(),"Failed to ssl handshake: $SSL_ERROR\n"; close($client) }
}

и сервер регистрирует только это:

Failed to ssl handshake: попытка принятия SSL не удалась

1 Ответ

0 голосов
/ 12 июля 2020

Хотя вы не предоставляете много деталей и в основном утверждаете, что WSS не работает с Chrome в целом (что неверно), я подозреваю, что следующая строка из вашего кода вызывает проблему:

SSL_verify_mode => SSL_VERIFY_PEER,

В этой строке вы запрашиваете сертификат клиента. Обратите внимание, что вы запрашиваете только один, но на самом деле он не требуется, то есть это только SSL_VERIFY_PEER, но не SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT. Это означает, что подтверждение TLS будет продолжено, если сертификат клиента не был отправлен.

На основании этого отчета об ошибке похоже, что Chrome не запрашивает пользователя, если соединение WSS запрашивает клиента. сертификат. Это означает, что соединение не будет установлено - если необходимый сертификат клиента уже не был запрошен ранее для того же источника (т.е. домен + порт), и, следовательно, можно было бы использовать предыдущий выбор. Учитывая, что вы, кажется, используете источник (домен + порт), указанный c для соединения WSS, это, вероятно, не так - поэтому он не работает.

Если вам вообще не нужны сертификаты клиента (что, вероятно, так, поскольку вы рассматриваете их как необязательные), просто удалите строку, которая запрашивает его. Если вам действительно нужны клиентские сертификаты, поместите ваш Websocket в тот же источник, что и остальная часть сайта, и запросите клиентские сертификаты там. См. здесь для типичного способа, как это делается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...