2012-07-18 34 views
6

Tôi có một ứng dụng WebSocket không an toàn hoạt động. Nhưng trang web của tôi sử dụng https và tôi cần kết nối WebSocket an toàn để tránh Firefox phàn nàn về việc kết nối không an toàn.Secure WebSocket (wss: //) không hoạt động trên Firefox

Tôi đang sử dụng php-websocket-server cho máy chủ WebSocket của mình với PhP 5.2.9, vì vậy khi tôi sử dụng bảo mật WebSocket tôi không thể giải mã các gói bằng hàm openssl_decrypt.

Đó là lý do tại sao tôi sử dụng stunnel để giải mã gói tin gửi đi bởi các khách hàng sử dụng WSS, để làm điều đó tôi binded WebSocket khách hàng để 12345 cổng một WebSocket máy chủ để cảng 54.321, sau đó tôi đã thêm một stunnel trong chế độ máy chủ:

[wsServer] 
accept = 12345 
connect = 192.168.1.227:54321 

Với cấu hình này, ứng dụng của tôi hoạt động tốt trên Chrome thông qua https + wss. Nhưng trên Firefox có vấn đề trong quá trình bắt tay, có vẻ như thiếu Sec-WebSocket-VersionSec-WebSocket-Key trong tiêu đề. Tôi không hiểu vì nó hoạt động trên Firefox thông qua http + ws.

Cảm ơn trước sự giúp đỡ của bạn.

Chỉnh sửa: tôi đã thêm ngoại lệ cho chứng chỉ trên cổng 12345, hiện tại việc bắt tay diễn ra tốt vì tôi nghĩ Firefox hiện có Sec-WebSocket-Key.

Ở đây, yêu cầu tiêu đề làm việc với Firefox (lớn hơn yêu cầu 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 
+0

Nếu bạn có thể hiển thị tiêu đề thực tế/bắt tay theo cả hai hướng cho trường hợp làm việc và không hoạt động, tôi có thể xác định nhanh chóng vấn đề là gì. – kanaka

Trả lời

8

Nếu bạn làm việc trong địa phương với giấy chứng nhận tự ký, bạn phải chấp nhận nó trên cả hai máy chủ https: // chạy trên cổng 443 và wss: // đang chạy trên cổng 12345 tại đây với Firefox.

Tôi nghĩ trình duyệt của bạn không cho phép kết nối websocket an toàn và lý do tại sao một số tiêu đề bị thiếu.

+1

Khi tôi nhìn vào giao diện điều khiển, yêu cầu WebSocket bị hủy bỏ, tôi đã nhấp chuột phải vào nó và tôi đã mở yêu cầu trong một tab mới. URL trong tab mới là 'https: //192.168.1.227: 12345 /' và Firefox đã yêu cầu tôi chấp nhận chứng chỉ cho cổng 12345. Lần đầu tiên tôi thử, Firefox đã yêu cầu tôi chấp nhận cổng https nhưng không phải cổng 12345. – strat

+1

Câu trả lời là đúng nhưng có một chút không rõ ràng. Ok đây rồi. Khi bạn cố gắng mở wss nói bằng cách sử dụng wss: //mysite.com: 12345, Firefox sẽ tiếp tục cung cấp cho bạn lỗi cho đến khi bạn mở một tab Firefox riêng và thử nhấn URL [https]: //mysite.com: 12345 và Xác nhận ngoại lệ bảo mật (giống như bạn thực hiện trên Firefox bình thường đối với mọi kết nối dựa trên https). Điều này thực sự kỳ lạ và chỉ xảy ra trong Firefox. –

+0

Cảm ơn !!! Câu trả lời của bạn đã giúp tôi rất nhiều. + 1ed :) –

Các vấn đề liên quan