configurar la cookie https en nodejs
También estoy intentando configurar un sistema de inicio de sesión en mi sitio web.
Escuché que las cookies de nodejs son una buena manera de hacerlo.
En los siguientes enlaces:
https://stackoverflow.com/a/21809393/322537
https://nodejs.org/dist/latest-v8.x/docs/api/https.html
Encontré un ejemplo de cómo se crean los servidores https. Tengo entendido que la función createServer debe ejecutarse cada vez que un cliente realiza una solicitud.
Entonces tengo lo siguiente en mi código:
var server_https=modules.https.createServer({
key: this.ssl_key,
cert:this.ssl_cert
},this.respond_to_client).listen(this.port);
mconnection.prototype.respond_to_client=function(request,response){
console.log('responded to client');
}
El servidor parece funcionar bien ya que el sitio web está en funcionamiento. Pero la función respond_to_client parece no ejecutarse nunca, ya que el archivo de registro de nodejs nunca indica la cadena 'respondió al cliente'.
¿Cómo es posible? ¿Podría tener algo que ver con que estoy actualizando el servidor https a un websocket poco después en el código?
actualización:
aquí está el archivo del servidor:
https://openage.org/s.js
aquí está el módulo de conexión:
https://openage.org/c.js
y aquí está el programa de chat que están sirviendo
https://openage.org/chat/14/?page=index
El plan es luego hacer cookies para identificar a los clientes y luego configurar un sistema de inicio de sesión. Pero estoy atrapado en esto. /:
Respuestas
He replicado sus scripts de nodo para pruebas locales. Primero ejecuté las cosas en http (vs https), y pude obtener una respuesta sin problemas. Sin embargo, al pasar a https, el servidor nunca recibe la solicitud. El navegador DEBE establecer primero una conexión segura antes de que se envíe la solicitud real.
Me encontré con un problema similar al intentar ejecutar varios servidores (https y ws) en el mismo puerto. Lo que tiene está muy cerca, sin embargo, su configuración para https.createServer ({opciones}, controlador), necesita ajustes.
Donde tienes:
var server_https= https.createServer({
key: this.ssl_key,
cert:this.ssl_cert
},respond_to_client).listen(this.port);
También debe agregar una opción para "ca":
var server_https= https.createServer({
key: this.ssl_key,
cert: this.ssl_cert,
ca: this.ssl_ca, // also add this
},respond_to_client).listen(this.port);
El valor que he usado para "ca" ha sido el contenido del archivo: interval.crt recibido de la autoridad de firma del certificado.
IMPORTANTE
Si bien es posible que esto funcione con un certificado autofirmado, nunca he podido hacerlo porque no hay una autoridad de firma.
Así que al igual que lo ha hecho con sus otros archivos de certificado, también debe hacer esto con el archivo interval.crt.
//Where you read your other cert files: add another.
this.ssl_ca = modules.fs.readFileSync(this.ssl_ca_pathfile);
Encontré esto difícil y mal documentado. No soy un experto en SSL / TSL, sin embargo, aparece una búsqueda rápida de certificado intermedio:
Un certificado intermedio es un certificado subordinado emitido por la raíz de confianza específicamente para emitir certificados de servidor de entidad final. El resultado es una cadena de certificados que comienza en la CA raíz de confianza, pasa por el intermedio y termina con el certificado SSL que se le ha emitido. Estos certificados se denominan certificados raíz encadenados. Fuente
intermedio.crt tendrá la siguiente estructura:
-----BEGIN CERTIFICATE-----
****
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
****
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
****
-----END CERTIFICATE-----
Aquí está la respuesta en el navegador.