[英]Twilio video fails in Chrome on Android and Safari on iOS, works on desktop
[英]iOS Safari fails to connect to secure websocket, but works on desktop
我有一個使用非自簽名證書的node.js https服務器。 我相信他們來自戈達迪,雖然不確定。 我的雇主僅向我提供了密鑰和證書文件。
服務器:
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');
此代碼可以在桌面chrome,safari和firefox上正常工作。 客戶端能夠連接到安全的websocket。 但是,在iOS 9.3.1 Safari上嘗試它會給我以下錯誤:
The operation couldn't be completed.(OSStatus error -9807.)
OSStatus向我顯示這是由無效的證書鏈引起的。 不幸的是,這是我對SSL的了解開始減弱的地方。 經過一些額外的谷歌搜索之后,我嘗試了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,我的網頁在桌面safari上工作正常,但在移動safari上卻無法正常工作。
停止嘗試之后,我發現問題出在“證書鏈”上。 https://stackoverflow.com/a/20444809/6939828
在將“ ca:chain.cer”注入到https.createServer的選項中之后,我正在使用TWCA的ssl認證,同一頁面的相同代碼僅適用於移動safari。 歡呼!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.