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.