He rastreado stackoverflow y el grupo express de google, pero todavía me estoy quedando corto.¿Cómo puedo configurar expressjs para manejar tanto http como https?
Por lo que sé, puedo hacer una de dos cosas:
1) Crear una instancia de un servidor HTTP y un servidor https y establecer los dos para escuchar a dos puertos diferentes. En las rutas, redirija la solicitud http al puerto https.
//app
var app = express.createServer();
var app_secure = express.createServer({key: key, cert: cert});
app.listen(8080);
app_secure.listen(8443);
//routes
app.get("unsecure/path", function(req, res) {
...
}
app.get("secure/path", function(req, res) {
res.redirect("https://domain" + req.path);
}
app_secure.get("secure/path", function(req, res) {
res.send("secure page");
}
2) hacer lo que dice TJ Hollowaychuk: https://gist.github.com/1051583
var http = require("http");
var https = require("https");
var app = express.createServer({key: key, cert: cert});
http.createServer(app.handle.bind(app)).listen(8080);
https.createServer(app.handle.bind(app)).listen(8443);
Cuando hago 1, en general no hay problemas. Sin embargo, se siente torpe administrar dos servidores y realmente siento que debería haber una mejor manera.
Cuando hago 2, me sale esto:
(nodo SSL) Error: 1408A0C1: Rutinas SSL: SSL3_GET_CLIENT_HELLO: no compartida cifrado
Por supuesto, sólo puede defecto en la opción 1, pero realmente, realmente quiero saber por qué obtengo ese "error de cifrado compartido" cuando hago la opción 2. Y la opción 2 sería mi ruta preferida.
terminé usando Nginx para manejar SSL. @Benjie El certificado es RSA. Voy a probar tu sugerencia en el futuro cercano. Gracias. – ant
¿Podría indicar cómo configuró nginx para manejar ssl para el nodo? Gracias – Mamsaac
La cosa es que no hiciste lo que dijo la esencia de TJ, casi, pero no exactamente. Las opciones de https deben dirigirse al servidor https, no al express.createServer. Entonces funciona Sin embargo, conseguirlo luego para trabajar con un servidor websocket es otra cosa completamente :) – youurayy