كيفية تصحيح Safari بصمت فشل في الاتصال بجيب ويب آمن

StackOverflow https://stackoverflow.com/questions/4014055

سؤال

عند القيام به new WebSocket('ws://server/'); Safari يتصل بشكل جيد ، ولكن عند استخدامه new WebSocket('wss://server/'); يفشل تمامًا (يعود أ null هدف). والأسوأ من ذلك أنه يفشل بصمت - لا توجد أخطاء في Traceback (خادم ويب eventlet مخصص) أو في وحدة التحكم في Safari.

يعمل Chrome بشكل جيد مع كل من المضيف الآمن وغير الآمن.

كيف يمكنني إجراء تصحيح الأخطاء أو إصلاح هذا؟ Google قصير جدًا على المعلومات.

فيما يلي بعض التتبع من التشغيل OpenSSL بدلاً من خادم WebSockets ورؤية ما يحدث. أولاً ، إليك ناتج تصحيح 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

وهنا Safari (الذي لا يعمل):

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

لذلك أعتقد أن Safari لديه مشكلة في شهاداتنا - لكن لا تكشفها عند استخدام HTTP العادية.

هل كانت مفيدة؟

المحلول

كشفت Sysadmin Fighdling عن حل: Setting Openssl SSLv3 بشكل افتراضي يقتل Safari ، ولكن السماح لها باختيار إصدار SSL الخاص به (all) يعمل بشكل جيد.

نصائح أخرى

حيث رأيت هذا ، فهذا يعني أن هناك خطأ ما في الشهادة (منتهية الصلاحية ، المجال غير الصحيح ، إلخ). حاول الاتصال مباشرة بخادم WebSockets من Safari ، أي https://wss_server:wss_port/. يجب أن يمنحك Safari رسالة خطأ أفضل بهذه الطريقة.

عندما واجهت هذه المشكلة أثناء تطوير wsproxy كجزء من Novnc (عميل HTML5 VNC) اتضح أنني كنت أستخدم عنوان IP للخادم ولكن تم توقيع الشهادة لاسم المضيف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top