2016-05-13 14 views
1

Hier ist meine Server-Seite:Chrome, NodeJS und HTTPS

var fs = require('fs'); 

var options = { 
    key: fs.readFileSync('/cert.key'), 
    cert: fs.readFileSync('/cert.crt') 
}; 

var app = require('express')(); 
var http = require('https').Server(options, app); 
var io = require('socket.io')(http); 
var port = 1234; 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/../subdomains/labs/socketio.html'); 
}); 

io.on('connection', function(socket){ 
    socket.on('chat message', function(msg){ 
    io.emit('chat message', msg); 
    }); 
}); 

http.listen(port, function(){ 
    console.log("\n\n--------------------------------"); 
    console.log('Currently Listening on port %d',port); 
    console.log("--------------------------------\n\n"); 
}); 

Und meine Client-Seite:

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> 
<script src="https://code.jquery.com/jquery-1.11.1.js"></script> 
<script> 
    var socket = io('https://labs.domain.com:1234'); 
    $('form').submit(function(){ 
     socket.emit('chat message', $('#chat-message').val()); 
     $('#chat-message').val(''); 
     return false; 
    }); 
    socket.on('chat message', function(msg){ 
     $('#messages').append($('<li>').text(msg)); 
    }); 
</script> 

Alle im Internet Explorer funktioniert gut (! AGH) Aber wenn es in Chrom mit ihm Dies ist:

GET https://labs.domain.com:1234/socket.io/?EIO=3&transport=polling&t=1463123926844-3 net::ERR_INSECURE_RESPONSE 

Es funktioniert gut in beiden Browsern, wenn ich den HTTPS-Aspekt davon entfernen.

Es ist ziemlich frustrierend, da es scheint, ein Problem nur mit Chrome zu sein, das ist der Browser, den ich am meisten verwende. Wie kann ich das beheben?

+0

Hilft dies [http://stackoverflow.com/a/25075349]? – robertklep

+0

Lesen Sie Folgendes: [Fehler beim Laden der Ressource: net :: ERR_INSECURE_RESPONSE] (http://stackoverflow.com/questions/23688565/failed-to-load-resource-neterr-insecure-response). – jfriend00

+0

@robertklep: Nein, weil ich die Frage nicht bekommen kann, wenn ich das neue Tab Bit mache. Es sagt nur "fahre trotzdem fort" und dann bekomme ich die selbe Seite. Aber trotzdem muss ich in der Lage sein, NodeJS über SSL zu verwenden, ohne dass meine Benutzer einen Haufen Unsinn durchmachen müssen. – Chud37

Antwort

2

Ich hatte Probleme mit Chrome, die keine sicheren Websocket-Verbindungen zulassen, wenn Probleme mit den Zertifikaten auftreten. Ich konnte socket.io hier mit unserer App arbeiten lassen, indem wir Zertifikate verwenden, die über LetsEncrypt erhalten wurden. Ich sage nicht, dass dies die einzige Möglichkeit ist, aber hier ist unsere Konfiguration:

1 - Sowohl ich als auch mein Teamkollege haben dynamische DNS-Einstellungen, um auf jede unserer Entwicklungen hinzuweisen Maschinen (zB: mac.example.com)

2 - Wir haben jeweils Zertifikate eingerichtet für unsere Domains (zB mac.example.com), erhalten von LetsEncrypt; Der Grund dafür ist, dass Chrome bei der Einrichtung von WebSockets sehr wählerisch ist, und es gibt (derzeit) für einen Entwickler oder Endbenutzer keine Möglichkeit, Zertifikate zu überschreiben und zu akzeptieren, die weniger sicher/selbstsigniert sind.

3 - Unser Code, socket.io in unserem node.js App konfiguriert wie folgt aussieht:

const server = https.createServer(/* ssl options: cert etc. */, myExpressApp) 
const io = require('socket.io')(server) 

Wir Socket.io v1.4.6

Es klingt wie die Frage aus Ihrer Frage mit ist, dass die Zertifikate auf Ihrem Server eingerichtet sind, aber wie Chrome immer noch über sie klagt. Das ist wahrscheinlich der Übeltäter, und es klingt, als ob Sie nicht die Sysadmin-Privilegien haben, um es zu ändern?

TL; DR Verwenden Sie keine selbstsignierten Zertifikate oder Zertifikate, die Chrome als "weniger" sicher erachtet.

Verwandte Themen