2015-07-27 7 views
0

Я тестировал функциональность веб-сокетов, используя интерфейс Javascript front-end и Java. Мне удалось получить связь между клиентом и сервером, работающим на стандартных протоколах HTTP/WS, но хотелось бы включить HTTPS для обслуживания интерфейсного (веб-сайта), а затем использовать WSS для подключения к серверной конечной точке Java.Не удается подключиться к серверу Websocket через TLS

До сих пор я установил сайт с HTTPS/TLS с использованием самозаверяющего сертификата, и я могу перейти на сайт с использованием протокола HTTPS: «https://domain-name.chat».

Теперь я предполагал, что это просто вопрос изменения протокола в uri до WSS при создании нового соединения с Websocket, поэтому я изменил uri на «wss: //domain.name.chat/serverEndpoint».

Теперь, когда я загружаю веб-страницу, соединение не выполняется, поскольку оно запускает обработчик события Websocket.onclose().

Я знаю, что в коде нет ничего плохого, потому что он ранее работал с использованием HTTP/WS.

Я правильно понимаю, что в Websockets нет проблем с блокировкой междоменных скриптов?

Я пропустил шаг в процессе настройки HTTPS/WSS?

EDIT: Добавлена ​​информация Виртуальный хост для домена сайта

<IfModule mod_ssl.c> 
<VirtualHost *:443> 
    ServerAdmin [email protected] 
    ServerName domain-name.chat 
    ServerAlias www.domain-name.chatt 

    DocumentRoot /usr/local/apache-tomcat-7.0.47/webapps/WebSocketChat/ 
    RewriteEngine on 
    RewriteRule ^/(.*)$ /WebSocketChat/$1 [l,PT] 
    JkMount /* worker2 

    SSLEngine on 
    SSLCertificateFile /etc/apache2/ssl/apache.crt 
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key 

</VirtualHost> 
</IfModule> 

Это установка разъем в server.xml для Tomcat7:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
       maxThreads="250" scheme="https" secure="true" 
       keystoreFile="${user.home}/.keystore" keystorePass="changeit" 
       clientAuth="false" sslProtocol="TLS" /> 
+0

Вы внесли правильные изменения на стороне сервера websocket? То есть настроить сертификаты, tls? – Andrey

+0

@ Andrey Да, я настроил ssl и создал самозаверяющий сертификат и разрешил виртуальный хост SSLEngine с сертификатом и ключом и т. Д. Является ли TLS чем-то отдельно от SSL? – crm

+0

Tls отдельно от ssl, но это не проблема, потому что https может использовать оба протокола для шифрования. Также вы используете apache, как я вижу, можете ли вы предоставить конфигурацию, связанную с websocket, чтобы мы могли диагностировать, что не так? Может быть [это] (http://stackoverflow.com/questions/11468154/tunneling-secure-websocket-connections-with-apache) вопрос поможет? – Andrey

ответ

0

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

Например, мой браузер Safari не будет подключаться к моему самозаверяющему серверу сертификатов (Iodine), пока Chrome будет.

Я думаю, что Safari продолжает проверять реестр реестра, пока Chrome не делает (если вы передаете экран предупреждения) ... Это конкретный браузер.

В протоколе Websocket указано, что браузеру следует прекратить соединение, если сертификат недействителен.

за:

я прав в понимании того, что WebSockets не имеет проблем блокирования междоменное сценария?

Это не так просто и есть небольшой заголовок безопасности, который предотвращает межсайтовый скриптинг.

Хотя безопасность на этом этапе очень легко обойти, браузеры отправляют заголовок Origin, в котором указывается исходный URL-адрес. Когда вы пытаетесь подключиться к веб-узлу с другим URL-адресом, сервер, скорее всего, откажется от этого соединения, если он не настроен на прием соединений из любого источника.

Редактировать: Еще одна мысль, вызванная комментариями, заключается в том, что ваш сервер может быть настроен неправильно.Вы подключались непосредственно к серверу прозрачного веб-сервера или использовали apache? для веб-узлов apache для прокси-серверов необходимо внести некоторые корректировки (поиск mod_websocket).

Смежные вопросы