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 рассматривается как так называемый «субресурс», а принятие сертификата / исключение безопасности / любые диалоги не отображаются для субресурсов.


Даже если это тот же сертификат, что и для HTTPS?
vekah 01

1
Что вы имеете в виду под «диалоговым окном, отображаемым браузером»? Нравится alert()?
Иван Перевезенцев

2
Диалоги, которые изначально создаются в браузере (а не на странице). Типа "этот сертификат недействителен, вы хотите продолжить?"
oberstet 02

так есть ли способ преодолеть это? Если я использую самозаверяющий сертификат, могу ли я использовать веб-сокет?
OhadR 01
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.