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.