impostazione del cookie https in nodejs

Aug 23 2020

Sto provando anche a configurare un sistema di accesso sul mio sito web.

Ho sentito che i cookie nodejs sono un buon modo per farlo.

Nei seguenti link:
https://stackoverflow.com/a/21809393/322537
https://nodejs.org/dist/latest-v8.x/docs/api/https.html
Ho trovato un esempio di come vengono creati i server https. A quanto mi risulta, la funzione createServer dovrebbe essere eseguita ogni volta che un client effettua una richiesta.

Quindi ho quanto segue nel mio codice:

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');
    }

Il server sembra funzionare correttamente poiché il sito Web è attivo e funzionante. Ma la funzione reply_to_client sembra non essere mai eseguita poiché il file di registro di nodejs non indica mai la stringa "ha risposto al client".

Come potrebbe essere? Potrebbe avere qualcosa a che fare con il fatto che sto aggiornando il server https a un websocket poco dopo nel codice?

aggiornamento:
ecco il file del server:
https://openage.org/s.js
ecco il modulo di connessione:
https://openage.org/c.js

ed ecco il programma di chat che stanno servendo
https://openage.org/chat/14/?page=index

Il piano è quindi quello di creare cookie per identificare i clienti e quindi impostare un sistema di accesso. Ma sono bloccato su questo. /:

Risposte

3 factorypolaris Aug 26 2020 at 17:27

Ho replicato i tuoi script di nodo per i test locali. Per prima cosa ho funzionato su http (vs https) e sono stato in grado di ottenere una risposta perfettamente. Tuttavia, quando si passa a https, la richiesta non viene mai ricevuta dal server. Il browser DEVE innanzitutto stabilire una connessione sicura prima che venga inviata la richiesta effettiva.

Ho riscontrato un problema simile durante il tentativo di eseguire più server (https e ws) sulla stessa porta. Quello che hai è molto vicino, tuttavia la tua configurazione per https.createServer ({opzioni}, gestore), necessita di aggiustamenti.

Dove hai:

var server_https= https.createServer({
        key: this.ssl_key,
        cert:this.ssl_cert
},respond_to_client).listen(this.port);

Devi anche aggiungere un'opzione per "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);

Il valore che ho usato per "ca" è stato il contenuto del file: intermedio.crt ricevuto dall'autorità di firma del certificato.


IMPORTANTE

Sebbene sia possibile farlo funzionare utilizzando un certificato autofirmato, non sono mai stato in grado di farlo poiché non esiste un'autorità di firma.


Quindi, proprio come hai fatto per gli altri file di certificato, dovresti farlo anche per il file intermedio.crt.

//Where you read your other cert files: add another.
this.ssl_ca = modules.fs.readFileSync(this.ssl_ca_pathfile);

Ho trovato questo difficile e scarsamente documentato. Non sono un esperto di SSL / TSL, tuttavia compare una rapida ricerca sul certificato intermedio:

Un certificato intermedio è un certificato subordinato emesso dalla radice attendibile specificamente per emettere certificati del server dell'entità finale. Il risultato è una catena di certificati che inizia presso la CA radice attendibile, attraverso l'intermedio e termina con il certificato SSL emesso. Tali certificati sono chiamati certificati radice concatenati. fonte

intermedio.crt avrà la seguente struttura:

-----BEGIN CERTIFICATE-----
****
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
****
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
****
-----END CERTIFICATE-----

Ecco la risposta nel browser.