2010-10-25 7 views
8

से कनेक्ट करने में चुपचाप विफल करने के लिए कैसे करें new WebSocket('ws://server/'); सफारी ठीक से कनेक्ट करता है, लेकिन new WebSocket('wss://server/'); का उपयोग करते समय यह पूरी तरह से विफल रहता है (null ऑब्जेक्ट देता है)। इससे भी बदतर, यह चुपचाप विफल रहता है - ट्रेसबैक में कोई त्रुटि नहीं (एक कस्टम इवेंटलेट वेब सर्वर) या सफारी के भीतर त्रुटि कंसोल में।सफारी को एक सुरक्षित वेबसॉकेट

क्रोम दोनों सुरक्षित और गैर-सुरक्षित होस्ट के साथ ठीक काम करता है।

मैं इसे डिबगिंग या फिक्स करने के बारे में कैसे जाउंगा? Google जानकारी पर बहुत छोटा है।

वेबस्केट सर्वर के स्थान पर ओपनएसएसएल चलाने और क्या होता है यह देखने से कुछ ट्रेसबैक है। सबसे पहले, यहाँ है Chrome की (जो काम करता है) डिबग आउटपुट:

Using default temp DH parameters 
Using default temp ECDH parameters 
ACCEPT 
SSL_accept:before/accept initialization 
SSL_accept:SSLv3 read client hello A 
SSL_accept:SSLv3 write server hello A 
SSL_accept:SSLv3 write certificate A 
SSL_accept:SSLv3 write key exchange A 
SSL_accept:SSLv3 write server done A 
SSL_accept:SSLv3 flush data 
SSL_accept:SSLv3 read client key exchange A 
SSL_accept:SSLv3 read finished A 
SSL_accept:unknown state 
SSL_accept:SSLv3 write change cipher spec A 
SSL_accept:SSLv3 write finished A 
SSL_accept:SSLv3 flush data 
-----BEGIN SSL SESSION PARAMETERS----- 
GIBBERISH HERE 
-----END SSL SESSION PARAMETERS----- 
Shared ciphers:CIPHERS_HERE 
CIPHER is REDACTED 
Secure Renegotiation IS supported 
GET/HTTP/1.1 
Upgrade: WebSocket 
Connection: Upgrade 
Host: live.redacted.com:8443 
Origin: http://redacted.com 
Sec-WebSocket-Key1: 1 [ B l wA 3 e60 d9[ n0!>8384 
Sec-WebSocket-Key2: 2 5 1 7p 17 64 3 9 
Cookie: __key=value 

और यहाँ है सफारी के (जो काम नहीं करता है):

ACCEPT 
SSL_accept:before/accept initialization 
SSL_accept:SSLv3 read client hello A 
SSL_accept:SSLv3 write server hello A 
SSL_accept:SSLv3 write certificate A 
SSL_accept:SSLv3 write server done A 
SSL_accept:SSLv3 flush data 
SSL_accept:failed in SSLv3 read client certificate A 
ERROR 
shutting down SSL 
CONNECTION CLOSED 

तो मुझे लगता है सफारी हमारे प्रमाण पत्र-लेकिन एक के साथ एक मुद्दा है नियमित HTTP का उपयोग करते समय यह प्रकट नहीं होता है।

उत्तर

3

सिसाडमिन फिडलिंग ने एक फिक्स का खुलासा किया है: डिफ़ॉल्ट रूप से ओपनएसएसएल को SSLv3 पर सेट करना सफारी को मारता है, लेकिन इसे अपना स्वयं का एसएसएल संस्करण (all) चुनने देता है।

+0

आह हाँ, यह एक और बात है जिसे मैं याद करता हूं। हालांकि, मुझे आश्चर्य है कि आपको उस मामले में अपने वेबसाकेट सर्वर से कोई प्रतिक्रिया नहीं मिल रही है। – kanaka

+0

वैसे यह अनुरोध भी प्राप्त नहीं कर रहा था, क्योंकि सफारी हैंडशेक के तुरंत बाद कनेक्शन बंद कर रहा था। यह WebSockets सर्वर कभी नहीं मिला। –

1

जहां मैंने इसे देखा है, इसका मतलब है प्रमाणपत्र (कालबाह्य, गलत डोमेन, आदि) में कुछ गड़बड़ है। Safari से सीधे WebSockets सर्वर से कनेक्ट करने का प्रयास करें, यानी https://wss_server:wss_port/। सफारी आपको इस तरह एक बेहतर त्रुटि संदेश देना चाहिए।

जब मुझे noVNC (एचटीएमएल 5 वीएनसी क्लाइंट) के हिस्से के रूप में wsproxy विकसित करते समय यह समस्या थी, तो यह पता चला कि मैं सर्वर के लिए एक आईपी का उपयोग कर रहा था लेकिन प्रमाणपत्र को होस्टनाम के लिए हस्ताक्षर किया गया था।

+0

प्रमाणपत्र ठीक है, हम हर दूसरे तरीके से कनेक्ट कर सकते हैं। यह एक एसएसएल विन्यास मुद्दा था, जैसा कि नीचे दिखाया गया है। –

संबंधित मुद्दे