iOS Safari не удается подключиться к защищенному websocket, но работает на рабочем столе

У меня есть сервер node.js https, используя неавторизованные сертификаты. Я верю, что они из godaddy, но не уверены. Мой работодатель предоставил мне только файлы ключей и сертификатов.

Сервер:

var fs = require('fs') , server = require('https').createServer({ key: fs.readFileSync( __dirname + "/key.pem" ), cert: fs.readFileSync(__dirname + "/cert.pem" ) }) , WebSocketServer = require('ws').Server , webSocketServer = new WebSocketServer({ server: server, }) , port = 8080; server.listen(port, function(){ console.log('Listening on ' + server.address().port) }); 

Клиент:

 var webSocket = new WebSocket('wss://my.website.com:8080'); 

Этот код работает, как ожидалось, на хром, сафари на компьютере и firefox. Клиент может подключиться к защищенному веб-узлу. Однако, пробуя его на iOS 9.3.1, Safari дает мне следующую ошибку:

The operation couldn't be completed.(OSStatus error -9807.)

OSStatus показал мне, что это вызвано недействительной цепочкой сертификатов. К сожалению, здесь я узнал о значении SSL, которое начинает исчезать. После некоторого дополнительного поиска в Google я попробовал несколько комбинаций следующих параметров, принятых https.createServer() :

 secureProtocol: "SSLv3_method", rejectUnauthorized: false, ciphers: 'ECDHE-RSA-AES256-SHA:AES256-SHA:RC4-SHA:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM', honorCipherOrder: true, requestCert: false 

До сих пор никто из них не работал. Я также видел параметр ca (центр сертификации), но не только не знаю, где я найду этот файл, все примеры в Интернете предполагают, что это используется только с самоподписанными сертификатами?

Любая помощь очень ценится, спасибо!

Как-то ставить nginx перед узловым приложением, казалось, исправить проблему. Мне удалось быстро выполнить следующую конфигурацию (взятую из этого урока ):

 server { listen 443; server_name *.website.com; ssl on; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; location / { proxy_pass https://pr.iv.ate.ip:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } 

Все еще большой ¯ \ _ (ツ) _ / ¯, почему он не работает с единственным узлом, но опять же мое знание ssl (а иногда и конфигурации сервера в целом) по-прежнему несколько ограничено.

У меня тоже есть эта проблема. Узел https + express + socket.io, моя веб-страница отлично работает на настольном сафари, но не на мобильном сафари.

После остановки захвата и попытки, я обнаружил, что проблема – «цепочка сертификатов». https://stackoverflow.com/a/20444809/6939828

Я использую сертификацию ssl TWCA после ввода «ca: chain.cer» в параметры https.createServer, тот же самый код страницы работает только на мобильном сафари. Ура!

  • SocketRocket не работает на iOS 5.0
  • Соединение WSS / TLS с Wi-Fi
  • Рекомендация о том, как документировать API Websocket
  • Может ли родной клиент iOS подключиться к серверу meteor.js?
  • Есть ли веские причины использовать веб-узлы вне браузера?
  • Как проверить трафик websocket с помощью charlesproxy для iOS-симулятора / устройств
  • Длительный опрос PubNub против сокетов - мобильный аккумулятор
  • Клиент iOS, подключающийся к серверу с использованием результатов socketrocket, приводит к «Сбой конца потока»,
  • Как запустить socket.io в фоновом режиме на iOS в приложении React Native?
  • Как я могу получить событие от Pusher, используя Starscream on Swift?
  • iOS - лучшее решение для внедрения веб-соединения во всем приложении iOS?
  • Interesting Posts
    Давайте будем гением компьютера.