我有一个能够工作的非安全WebSocket应用程序。但是我的网站使用https,因此我需要一个安全的WebSocket连接,以避免Firefox抱怨连接不安全的事实。
我正在使用PhP 5.2.9的php-websocket-server作为我的WebSocket服务器,因此当我使用WebSocket Secure时,我无法使用openssl_decrypt函数解密数据包。
这就是为什么我使用stunnel来解密使用wss发送的客户端数据包的原因,我将客户端WebSocket绑定到12345端口和服务器WebSocket绑定到54321端口,然后在服务器模式下添加了一个stunnel:
使用这个配置,我的应用可以在Chrome上通过https+wss正常工作。但是在Firefox中握手时会出现问题,似乎header中缺少Sec-WebSocket-Version和Sec-WebSocket-Key。我不明白为什么它可以通过http+ws在Firefox上工作。
提前感谢您的帮助。
编辑:我添加了一个证书例外的端口12345,现在握手进行得很好,因为我认为Firefox现在有了Sec-WebSocket-Key。
这里是使用Firefox的工作头请求(比Chrome请求更大):
我正在使用PhP 5.2.9的php-websocket-server作为我的WebSocket服务器,因此当我使用WebSocket Secure时,我无法使用openssl_decrypt函数解密数据包。
这就是为什么我使用stunnel来解密使用wss发送的客户端数据包的原因,我将客户端WebSocket绑定到12345端口和服务器WebSocket绑定到54321端口,然后在服务器模式下添加了一个stunnel:
[wsServer]
accept = 12345
connect = 192.168.1.227:54321
使用这个配置,我的应用可以在Chrome上通过https+wss正常工作。但是在Firefox中握手时会出现问题,似乎header中缺少Sec-WebSocket-Version和Sec-WebSocket-Key。我不明白为什么它可以通过http+ws在Firefox上工作。
提前感谢您的帮助。
编辑:我添加了一个证书例外的端口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