Безопасный WebSocket (wss://) не работает в Firefox

у меня есть рабочее приложение WebSocket non secure. Но мой сайт использует https, и мне нужно безопасное соединение WebSocket, чтобы избежать Firefox жаловаться на то, что соединение небезопасно.

я использую php-websocket-сервер для моего сервера WebSocket с PhP 5.2.9, поэтому, когда я использую WebSocket secure, я не могу расшифровать пакеты с помощью функции openssl_decrypt.

вот почему я использовал stunnel для расшифровки пакетов, отправленных клиент, использующий wss, для этого я привязал клиентский WebSocket к порту 12345 серверный WebSocket к порту 54321, затем я добавил stunnel в режиме сервера:

[wsServer]
accept  = 12345
connect = 192.168.1.227:54321

С этой конфигурацией мое приложение отлично работает на Chrome через https + wss. Но в Firefox есть проблема во время рукопожатия кажется, что Sec-WebSocket-Version и Sec-WebSocket-Key отсутствуют в заголовке. Я не понимаю, потому что он работает на Firefox через http + ws.

заранее спасибо за помощь.

Edit: я добавил исключение для сертификата на порту 12345, теперь рукопожатие идет хорошо, потому что я думаю, что Firefox теперь имеет Sec-WebSocket-Key.

здесь рабочий запрос заголовка с Firefox (больше, чем запрос Chrome):

GET / HTTP/1.1
Host: 192.168.1.227:12345
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive, Upgrade
Sec-WebSocket-Version: 13
Origin: https://192.168.1.227
Sec-WebSocket-Protocol: HyBi-00
Sec-WebSocket-Key: 65nHN33M6drIPjQHcGK8pA==
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket

1 ответов


Если вы работаете в local с автоматически подписанным сертификатом, вы должны утвердить его на обоих серверах https://, работающих на порту 443 и wss://, работающих на порту 12345 здесь с Firefox.

Я думаю, что ваш браузер не позволяет безопасное соединение websocket и поэтому некоторые заголовки отсутствуют.