2011-02-27 19 views
14

Estoy intentando crear un servidor node.js seguro para usar con mi sitio que usa ssl (https).Error seguro HTTPS de Node.js

const crypto = require('crypto'), 
     fs = require("fs"), 
     http = require("http"); 

var privateKey = fs.readFileSync('/home/privatekey.pem'); 
var certificate = fs.readFileSync('/home/certificate.pem'); 

var credentials = crypto.createCredentials({key: privateKey.toString(), cert: certificate.toString()}); 

var handler = function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World\n'); 
}; 

var server = http.createServer(); 
server.setSecure(credentials); 
server.addListener("request", handler); 
server.listen(8084); 

Pero cuando comienzo mi servidor, me sale el siguiente error:

node.js:116 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
TypeError: Object #<Server> has no method 'setSecure' 
    at Object.<anonymous> (/home/meshdev/public_html/js/node/server/test.js:16:8) 
    at Module._compile (module.js:380:26) 
    at Object..js (module.js:386:10) 
    at Module.load (module.js:312:31) 
    at Function._load (module.js:273:12) 
    at Array.<anonymous> (module.js:399:10) 
    at EventEmitter._tickCallback (node.js:108:26) 

Mi servidor funciona muy bien sin la línea server.setSecure(credentials);. Estoy ejecutando node.js (V0.4.1).

Agradecería cualquier sugerencia.

Gracias.

Respuesta

14

La implementación de HTTPS se volvió a realizar en Node.JS 0.4. Consulte los documentos correspondientes al nodejs.org.

Ejemplo de la documentación:

var tls = require('tls'); 
var fs = require('fs'); 

var options = { 
    key: fs.readFileSync('server-key.pem'), 
    cert: fs.readFileSync('server-cert.pem') 
}; 

tls.createServer(options, function (s) { 
    s.write("welcome!\n"); 
    s.pipe(s); 
}).listen(8000); 
+0

@schaermu - Gracias por la respuesta. Ha impedido que mi servidor de nodos devuelva errores al inicio, pero ahora estoy obteniendo este error cuando conecto el lado del cliente: http://pastebin.com/ECf1fxLB ¿Alguna idea? – Kit

+0

¿podría publicar el contenido de 's.authorizationError'? Debería haber un mejor mensaje de error cuando falla un handshake tls (según los documentos). – schaermu

+0

Lo siento. Mi error. Estoy usando este código para el servidor: http://pastebin.com/FHmVpPS9. Y este código para la conexión del lado del cliente: http://pastebin.com/xxcL7Rqv. El servidor de nodo ya no tiene errores, pero el lado del cliente no se puede conectar. – Kit

0

esta configuración permite que conecte con mi servidor SSL socket.io (HTTPS/WSS)

http=require('https'),io=require('socket.io'),fs=require('fs'); 

var privateKey = fs.readFileSync('ssl/nginx.key'); 
var certificate = fs.readFileSync('ssl/nginx.crt'); 
var options = {key: privateKey,cert: certificate}; 
var server = http.createServer(options); 
server.listen(3000); 
io = io.listen(server); 
0

He trabajado en el seguro HTTPS con el ssl aquí está el código de trabajo para hacer el https y http

var fs = require('fs'); 
 
var http = require('http'); 
 
var https = require('https'); 
 
var debug = require('debug')('expressapp'); 
 
var app = require('../app'); 
 
var CONSTANTS = require('../config/CONSTANTS.js'); 
 
var AWS = require('aws-sdk'); 
 
var certificate =fs.readFileSync('ssl/server.crt',{encoding:'utf8'},function(err, data) { 
 
    console.log(data);}); 
 
var privateKey = fs.readFileSync('ssl/server.key',{encoding:'utf8'},function(err, data) { 
 
    console.log(data);}); 
 

 

 
var credentials = { 
 
    key: privateKey, 
 
    cert: certificate, 
 
    rejectUnauthorized:false 
 
}; 
 

 
// UNCOMMENT THIS LINE AFTER INSTALLING CA CERTIFICATE 
 
//credentials.ca = fs.readFileSync('ssl/server.crt', 'utf8');; 
 

 
var httpServer = http.createServer(app); 
 
var httpsServer = https.createServer(credentials, app); 
 

 
    httpServer.listen(CONSTANTS.PORT.HTTP, function() { 
 
    console.log('HTTP server listening on port ' + CONSTANTS.PORT.HTTP); 
 
    }) ; 
 

 
httpsServer.listen(CONSTANTS.PORT.HTTPS, function() { 
 
    console.log('HTTPS server listening on port ' + CONSTANTS.PORT.HTTPS); 
 
});