2014-07-02 6 views
11

Korzystam z modułu eniaros/ws dla NodeJS do komunikowania się w czasie rzeczywistym między aplikacją iOS a serwerem NodeJS za pomocą gniazd internetowych.Jak skonfigurować moduł einaros/ws dla NodeJS, aby akceptował połączenia wss (secure ws)?

Aplikacja działa dobrze, ale teraz muszę zabezpieczyć komunikację między serwerem a aplikacją iOS za pomocą wss. Mam certyfikat Szybka SSL i klucz i używam następujący kod na serwerze:

var fs = require('fs'); 

var cfg = { 
    ssl: true, 
    port: 8081, 
    ssl_key: 'key.key', 
    ssl_cert: 'cert.crt' 
}; 

var httpServ = (cfg.ssl) ? require('https') : require('http'); 

var app  = null; 

// dummy request processing 
var processRequest = function(req, res) { 

    res.writeHead(200); 
    res.end("All glory to WebSockets!\n"); 
}; 

if (cfg.ssl) { 

    app = httpServ.createServer({ 

     // providing server with SSL key/cert 
     key: fs.readFileSync(cfg.ssl_key), 
     cert: fs.readFileSync(cfg.ssl_cert) 

    }, processRequest).listen(cfg.port); 

} else { 

    app = httpServ.createServer(processRequest).listen(cfg.port); 
} 

// passing or reference to web server so WS would knew port and SSL capabilities 
var WebSocketServer = require('ws').Server; 
var wss = new WebSocketServer({ server: app }); 

Kod jest dość dużo Przykład podany w pliku ws/examples/ssl.js na GitHub, ale z jakiegoś powodu/serwer ws NodeJS nie akceptuje żadnych połączeń wss.

Używam poprawnej ścieżki wss: // REMOTE_SERVER_IP: 8081/i testuję z http://www.websocket.org/echo.html.

Szukałem daleko i szeroko, ale nie wydaje się być aktualnym samouczkiem, jak skonfigurować bezpieczne wss przy użyciu eniaros/ws.

+0

Ten fragment kodu jest stosunkowo duży, dlatego chciałbym podkreślić, że kluczem do tego jest przekazywanie instancji 'https' do' new WebSocketServer() 'zamiast tylko' {port: 80} '. [Więcej informacji tutaj] (http://stackoverflow.com/q/31338927/722036). Mam nadzieję że to pomoże. –

Odpowiedz

11

3 miesiące później ponownie przeanalizowałem problem i rozwiązałem problem.

Kod jest prawidłowy.

Mój błąd polegał na tym, że próbowałem połączyć klienta przy użyciu adresu IP serwera (wss: //xx.xx.xx.xx: 8081) zamiast używać subdomeny, dla której wydano certyfikat i klucz (wss: //secure.subdoma.in: 8081).

Powiązane problemy