WebSocket з SSL


115

Чи можливо мати WebSockets з HTTPS?

Під час переходу на HTTPS мій WebSocket повертає помилку безпеки та чудово працює із звичайним HTTP.

Внизу, фрагмент;

socket = new WebSocket("ws://my_www:1235"); 

мені погано, я зрозумів, що сервер сокетів AIR, який я використовую, не захищений, мені потрібно переписати, щоб використовувати flash.net.SecureSocket ...
Ерік,

Відповіді:


170

З'єднання WebSocket починає своє життя з рукостискання HTTP або HTTPS. Коли доступ до сторінки здійснюється через HTTP, ви можете використовувати WS або WSS (захищено WebSocket: WS через TLS). Однак, коли ваша сторінка завантажується через HTTPS, ви можете використовувати лише WSS - браузери не дозволяють «знижувати» захист.


це те, що я маю, але я зрозумів, що сервер сокетів AIR, який я використовую, не захищений, мені потрібно переписати, щоб використовувати flash.net.SecureSocket ...
Ерік,

Також у Flash є серйозні проблеми ... Ви будуєте сервер WebSocket (якщо так, то чому), або ви будуєте додаток?
Петро Московіц

1
У мене працює сервер сокетів AIR так.
Ерік

Тож як вибрати WSS, якщо сторінка не завантажена HTTP?
anatoly techtonik

29

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

Я вважаю, що остання версія Firefox не дозволить вам використовувати веб-сокети, що не належать до TLS, зі сторінки HTTPS, але зворотне не повинно бути проблемою.


Отже, яке рішення? У мене WS-сервер працює над http, зараз я придбав SSL і браузер, більше не дозволяйте мені з'єднуватися з WS. Я перетворив WS на WSS: // і тепер його не з'єднується з WebSocket
muaaz

@muaaz ваш сервер WebSocket повинен працювати в режимі WSS і бажано завантажуватися тими ж сертифікатами / ключами SSL, що і ваш веб-сервер, який обслуговує ваші вихідні веб-сторінки, які намагаються підключитися до сервера websocket.
канака

4
Дякую. btw, я щойно вирішив це, проксінг (використовуючи apache) запит від wss://до ws://. Отже, я використовую wss://ws.domain.comі apache, застосовую проксі-сервер до нього та перенаправляю запит, де працює WS-сервер. наприклад: ws://10.12.23.45:5641/server.php. і я знаю, що це дуже погане рішення - хоча це працює на мене. Буду вдячний за вашу допомогу, якщо ви проведете мене через конфігурацію apache. наприклад: куди поставити і .certт.д. подяки!
muaaz

@muaaz вибачте, я не знаю конфігурації apache, окрім того, що я гуглю сам.
канака

21

1 додатковий застереження (окрім відповіді kanaka / peter): якщо ви використовуєте WSS, а серверний сертифікат не прийнятний для браузера, ви можете не отримати жодного діалогового вікна браузера (як це відбувається для веб-сторінок). Це пов’язано з тим, що WebSockets трактується як так званий "субресурс", і сертифікат приймання / виключення безпеки / будь-які діалоги не надаються для субресурсів.


Навіть якщо це той самий сертифікат, що і те, що використовується для HTTPS?
vekah

1
Що ви маєте на увазі під діалоговим вікном, наданим браузером? Як alert()?
Іван Перевезенцев

2
Діалоги, які походять безпосередньо в браузері (не на сторінці). На кшталт "цей серт недійсний, ви хочете продовжити?"
оберстет

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