WebSocket с SSL

117

Возможно ли иметь WebSockets с HTTPS?

При переключении на HTTPS мой WebSocket возвращает ошибку безопасности и отлично работает с обычным HTTP.

Ниже фрагмент;

socket = new WebSocket("ws://my_www:1235"); 
Эрик
источник
мой плохой, я понял, что сервер сокетов AIR, который я использую, небезопасен, мне нужно переписать, чтобы использовать flash.net.SecureSocket ...
Эрик

Ответы:

172

Соединение WebSocket начинает свою жизнь с рукопожатия HTTP или HTTPS. Когда доступ к странице осуществляется через HTTP, вы можете использовать WS или WSS (WebSocket secure: WS over TLS). Однако, когда ваша страница загружается через HTTPS, вы можете использовать только WSS - браузеры не позволяют «понизить» безопасность.

Петр Московиц
источник
это то, что у меня есть, но я понял, что сервер сокетов AIR, который я использую, небезопасен, мне нужно переписать, чтобы использовать flash.net.SecureSocket ...
Эрик
У Flash тоже есть свои серьезные проблемы ... Вы создаете сервер WebSocket (если да, то почему), или вы создаете приложение?
Питер Московиц
1
Да, у меня запущен сервер сокетов AIR.
Эрик
Итак, как выбрать WSS, если страница не загружается по HTTP?
анатолий техтоник
30

Вы не можете использовать WebSockets через HTTPS, но вы можете использовать WebSockets через TLS (HTTPS - это HTTP через TLS). Просто используйте "wss: //" в URI.

Я считаю, что последняя версия Firefox не позволит вам использовать веб-сокеты без TLS со страницы HTTPS, но обратное не должно быть проблемой.

канак
источник
Итак, какое решение? У меня WS-сервер работает через http. Я купил SSL, и браузер больше не позволяет мне подключаться к WS. Я переключил WS на WSS: //, и теперь он не соединяется с WebSocket
muaaz 01
@muaaz ваш сервер WebSocket должен работать в режиме WSS и предпочтительно загружаться с тем же сертификатом / ключами SSL, что и ваш веб-сервер, обслуживающий ваши исходные веб-страницы, которые пытаются подключиться к серверу websocket.
kanaka
4
Спасибо. кстати, я только что решил это, проксируя (используя apache) запрос от wss://to ws://. Итак, я использую, wss://ws.domain.comа apache применяет к нему прокси и перенаправляет запрос на то, где запущен сервер WS. например: ws://10.12.23.45:5641/server.php. и я знаю, что это очень плохое решение, хотя оно работает для меня. Буду признателен за вашу помощь, если вы проведете меня через конфигурацию apache. например: куда положить и .certт. д. спасибо!
muaaz 02
@muaaz извините, я не знаю конфигурацию apache, кроме как сам погуглить.
kanaka
21

1 дополнительное предостережение (помимо ответа kanaka / peter): если вы используете WSS и сертификат сервера неприемлем для браузера, вы можете не получить диалоговое окно, отображаемое браузером (как это происходит с веб-страницами). Это связано с тем, что WebSockets рассматривается как так называемый «субресурс», а принятие сертификата / исключение безопасности / любые диалоги не отображаются для субресурсов.

oberstet
источник
Даже если это тот же сертификат, что и для HTTPS?
vekah 01
1
Что вы имеете в виду под «диалоговым окном, отображаемым браузером»? Нравится alert()?
Иван Перевезенцев
2
Диалоги, которые изначально создаются в браузере (а не на странице). Типа "этот сертификат недействителен, вы хотите продолжить?"
oberstet 02
так есть ли способ преодолеть это? Если я использую самозаверяющий сертификат, могу ли я использовать веб-сокет?
OhadR 01