2012-07-20 46 views
38

Chúng tôi đang cố gắng để các ổ cắm Socket.io hoạt động trong Internet Explorer 9 qua HTTPS/WSS. Các flashsockets hoạt động trên HTTP, nhưng HTTPS cho chúng ta vấn đề. Chúng tôi đang sử dụng phiên bản socket.io 0.8.7 và socket.io-client phiên bản 0.9.1-1.Lỗi HTTPS "chiều dài dữ liệu quá dài" trong s3_pkt.c từ Socket.io

Chúng tôi đang chạy máy chủ websocket của chúng tôi qua SSL trên cổng 443. Chúng tôi đã chỉ định vị trí tệp WebsocketMainInsecure.swf của chúng tôi (đây là các yêu cầu của miền chéo) ở vị trí chính xác và chúng tôi đang tải tệp trong swfobject được nhúng qua HTTPS.

Chúng tôi đã mở cổng 843 trong nhóm bảo mật của mình cho phiên bản EC2 của chúng tôi và tệp chính sách nguồn gốc chéo được hiển thị thành công qua HTTP. Dường như nó không hiển thị qua HTTPS (Chrome ném lỗi kết nối SSL).

Chúng tôi đã thử hai phiên bản của tệp WebsocketMainInsecure.swf. Đầu tiên là các tập tin được cung cấp bởi Socket.io, được xây dựng tắt của WebsocketMainInsecure.as mà không bao gồm các dòng

Security.allowInsecureDomain("*"); 

này ném lỗi SCRIPT16389: Unspecified error. tại dòng WebSocket.__flash.setCallerUrl(location.href).

Chúng tôi figured nó là vì tệp SWF đã không được phép yêu cầu HTTPS, vì vậy chúng tôi thay thế các tập tin WebSocketMainInsecure.swf với một tìm thấy tại repo này: https://github.com/gimite/web-socket-js vì nó bao gồm các dòng

Security.allowInsecureDomain("*"); 

trong actionscript mã. Khi chúng ta sử dụng điều này, chúng ta thấy rằng kết nối flashsocket tiếp tục ngắt kết nối và kết nối lại trong một vòng lặp vô hạn. Chúng tôi đã theo dõi lỗi xuống tệp transport.js trong thư viện socket.io trong hàm onSocketError trên nguyên mẫu Transport. Nó ném lỗi:

[Error: 139662382290912:error:1408F092:SSL routines:SSL3_GET_RECORD:data length too long:s3_pkt.c:503:] 

Chúng tôi thậm chí đã cố gắng cập nhật cả socket.io và socket.io-client lên phiên bản 0.9.6 và chúng tôi vẫn có những lỗi Access is denied.

Lỗi này rất khó gỡ lỗi và giờ đây chúng tôi không biết cách làm cách nào để có được ổ flash hoạt động. Chúng tôi đang tự hỏi liệu nó có liên quan đến việc sử dụng phiên bản cũ hơn của socket.io hay có thể máy chủ tệp chính sách của chúng tôi không chấp nhận các yêu cầu HTTPS hoặc thậm chí là cách mà tệp WebSocketMainInsecure.swf từ web- socket-js github repo được xây dựng tương đối so với những gì socket.io-client mong đợi.

+1

Điều này có thể được yêu cầu tốt hơn trong một diễn đàn khác. . . ServerFault có thể là một cược tốt. Đây là [một câu hỏi từ đó về một lỗi tương tự] (http://serverfault.com/questions/402152/error-in-openssl-s-client-data-length-is-too-long), và điều đó có thể cho bạn một số manh mối. – iND

+1

@iND Thấy câu hỏi đó nhưng không chắc chắn nếu nó giúp tôi, bạn nghĩ sao? – user730569

+1

Tôi có kiến ​​thức rất hạn chế về tương tác máy chủ gỡ lỗi và điều này có thể không phải là diễn đàn với hầu hết các chuyên gia trong khu vực đó. Bạn có thể nhận được phản hồi tốt hơn trong các diễn đàn tập trung hơn. Tuy nhiên, nó ngụ ý rằng điều này có thể không phải là một vấn đề Flash. Thông báo lỗi giống nhau và số dòng chỉ cách xa dòng lỗi của bạn, vì vậy tôi sẽ nghĩ rằng các giải pháp - nếu bạn bỏ qua thông tin liên quan đến LDAP - có thể có một số vòng bi ở đây. – iND

Trả lời

1

Tôi không chắc chắn về thời tiết hoạt động. Nhưng đây là ý tưởng/đề xuất của tôi:

  1. Ý tưởng: Tôi cho rằng bạn (có thể) đã cố gắng truy cập URL quá dài. Điều này xảy ra nếu dữ liệu thường được truyền qua GET-Parameters. Giới hạn chính thức cho URL dưới 512 byte.

Chi tiết: Đặc tả HTTP cho biết dòng giao thức có thể tối đa 512 byte. Nếu máy chủ có thể từ chối yêu cầu lâu hơn hoặc có thể không xử lý được yêu cầu đó. Dòng đầu tiên trong HTTP với GET-requet giống như "GET/path/to? Param1 = data1 & param2 = data2 & ... HTTP/1.1" cần phải vừa với 512 byte. Đối với các yêu cầu POST không có giới hạn như vậy ..

Tuy nhiên, lỗi của bạn dường như xuất phát từ một số triển khai SSL (openSSL?): Tham chiếu đến s3_pkt.c tại dòng 503 (Tôi tìm thấy một tập tin như thế này ở đây: http://www.opensource.apple.com/source/OpenSSL/OpenSSL-7.1/openssl/ssl/s3_pkt.c) nhưng có vẻ là khác nhau; Tôi không biết chi tiết, và tôi chỉ suy đoán: Tôi có thể nghĩ rằng việc triển khai openSSL có một số hỗ trợ hạn chế cho các yêu cầu GET dài (vì chúng không tuân thủ HTTP) và chỉ từ chối chúng theo cách này ...

Tôi thấy những khả năng này ngay bây giờ: 1. Giải pháp: Sử dụng POST thay vì GET-Requests để truyền dữ liệu dài hơn. Xem nếu điều này hoạt động ... 2. Hãy thử thay thế bạn openssl-installation hoặc libopenssl tại máy chủ được sử dụng; nó có thể bị hỏng hoặc lỗi thời? 3. Cố gắng để yêu cầu sự giúp đỡ từ các nhà phát triển openssl ...

Hy vọng rằng sẽ giúp ...

1

xây dựng Thử OpenSSL với SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER (tín dụng cho Steven Henson và Jaaron Anderson từ mailing list OpenSSL).

+0

cảm ơn! Tôi có cần phải xây dựng OpenSSL với tùy chọn đó không, hoặc tôi có thể chỉ định tùy chọn '-bugs' khi chạy' s_client' để đặt tùy chọn? – user730569

+0

Và nếu tôi xây dựng lại nó, làm thế nào để tôi xác định tùy chọn này? – user730569

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