2015-09-21 18 views
6

Ich habe ein Zertifikat gekauft und in meinem node.js Website installiert.Aber das https im Browser zeigt grün und ist OK.Jetzt versuche ich, eine Socket-Verbindung mit wss herzustellen, aber es ist fehlgeschlagen . Der Fehler auf der Javascript-Client-Seite ist so.WebSocket-Verbindung auf wss fehlgeschlagen

WebSocket connection to 'wss://securedsitedotcom:3003/call' failed:   
    WebSocket opening handshake was canceled 

Bitte helfen!

-Code auf Client-Seite (Javascript)

var ws = new WebSocket('wss://securedsitedotcom:3003/call'); 

-Code auf Serverseite (node.js)

https = require('https'); 
var server = https.createServer({ 
    key: fs.readFileSync(config.certKeyPath), 
    cert: fs.readFileSync(config.certCrt), 
    requestCert: true, 
    rejectUnauthorized: false 
},app); 
server.listen(port); 
var wss = new ws.Server({ 
    server: server, 
    path: '/call' 
}); 

Fehler an der Browser-Konsole:

WebSocket connection to 'wss://securedsitedotcom:3003/call' failed:   

WebSocket opening handshake was canceled 
+1

Implementiert der Server WSS auf Port 3003? –

+0

klingt wie der Server nicht das Verbindungs-Upgrade behandelt: Können Sie weitere Informationen zur Verfügung stellen? – pietro909

+0

Ja, Server ist auf Port 3003 @DavidSchwartz – Thabung

Antwort

2

Neue Arbeiten mit Chrome hat ergeben, dass Websockets, wenn eine Seite in Chrome als https geschaltet wird, wss verwenden müssen. Und wenn wss verwendet werden muss, muss Port 443 verwendet werden (und um keinen anderen sicheren Port zu booten und bisher habe ich keine Möglichkeit gesehen, den Port zu ändern), was Ihr Problem sein könnte, da Ihr Port wie oben 3003 aussieht.

Im Moment versuche ich, meine IT-Gruppe Apache auf diesem Server zu patchen/upgrade, also kann mod_proxy_wstunnel verwendet werden, um Apache auf einem Reverse-Proxy zu hören und den gesamten wss-Verkehr an meinen Websocket-Server weiterzuleiten.

Hoffe, das hilft.

2

Ich stieß auf ein ähnliches Problem, aber ich verwendete ein selbstsigniertes Zertifikat. Sie haben erwähnt, dass Sie ein Zertifikat gekauft haben. Ich Gast es ist von der Zertifizierungsstelle unterzeichnet.

Andernfalls, wie in meinem Fall, kann ein nicht validiertes Zertifikat den Fehler "Eröffnungshandshake wurde abgebrochen" verursachen. Ein validiertes Zertifikat wird entweder von einer Drittpartei (Zertifizierungsstelle, dh VeriSign) validiert oder ausdrücklich vom Kunden autorisiert.

In meinem Fall signierte VeriSign mein Zertifikat nicht (selbst signiert), also musste ich es explizit autorisieren. Dazu muss ich lediglich die https-URL mit dem Browser aufrufen (in Ihrem Fall "https://securedsitedotcom:3003/call"). Dann erscheint ein "Warnung nicht autorisierter Host". Sie müssen die Ausnahme autorisieren und dann können Sie Ihre WSS-Verbindung herstellen.

Ihr Server kann einen beliebigen Port verwenden, er ist nicht an 443 gebunden. 443 ist der Standardport für https, aber jeder Port kann explizit so angegeben werden, wie Sie es getan haben.

Ich hoffe, es hilft jemandem.

+0

Ihr Server kann jeden Port verwenden, es ist wahr, aber ich kann immer noch zugreifen. WebSocket-Verbindung zu 'ws: //maximumroulette.com: 10066 /' fehlgeschlagen: Verbindung wurde vor dem Empfang einer Handshake-Antwort geschlossen WebSocket-Verbindung zu 'wss: //maximumroulette.com: 10066 /' fehlgeschlagen: Websocket-Handshake wurde abgebrochen Töte mich .... –

+1

es ist eine Weile her, ich hoffe du hast es behoben. Ansonsten habe ich in meiner Antwort gesagt, dass der "Eröffnungs-Handshake wurde abgebrochen" Fehler ist wahrscheinlich auf Ihren ** Browser ** Sie vor einer ** nicht validierten Quelle ** zu schützen.(Aka, Ihr Zertifikat ist entweder ** nicht von einer CA signiert **) (dh verisign) oder ** nicht explizit autorisiert **). Um die Verwendung von Chrome zu autorisieren, besuchen Sie entweder den https-Server und übergeben Sie die Warnung oder in den Einstellungen => https/ssl => Zertifikat verwalten => von dort autorisieren – w4rt3r

Verwandte Themen