configuration du cookie https dans nodejs
J'essaie également de configurer un système de connexion sur mon site Web.
J'ai entendu dire que les cookies nodejs sont un bon moyen de le faire.
Dans les liens suivants:
https://stackoverflow.com/a/21809393/322537
https://nodejs.org/dist/latest-v8.x/docs/api/https.html
J'ai trouvé un exemple de la façon dont les serveurs https sont créés. Je crois comprendre que la fonction createServer doit s'exécuter chaque fois qu'un client fait une demande.
J'ai donc ce qui suit dans mon code:
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');
}
Le serveur semble fonctionner correctement car le site Web est opérationnel. Mais la fonction respond_to_client semble ne jamais s'exécuter car le fichier journal de nodejs n'indique jamais la chaîne «a répondu au client».
Comment cela pourrait-il être? Cela pourrait-il avoir quelque chose à voir avec le fait que je mets à niveau le serveur https vers un websocket peu de temps plus tard dans le code?
mise à jour:
voici le fichier serveur:
https://openage.org/s.js
voici le module de connexion:
https://openage.org/c.js
et voici le programme de chat qu'ils servent
https://openage.org/chat/14/?page=index
Le plan est ensuite de créer des cookies pour identifier les clients, puis de configurer un système de connexion. Mais je suis coincé là-dedans. /:
Réponses
J'ai répliqué vos scripts de nœuds pour des tests locaux. J'ai d'abord fait fonctionner les choses sur http (vs https) et j'ai pu obtenir une réponse très bien. Cependant, lors du passage à https, la demande n'est jamais reçue par le serveur. Le navigateur DOIT d'abord établir une connexion sécurisée avant que la demande réelle ne soit envoyée.
J'ai rencontré un problème similaire en essayant d'exécuter plusieurs serveurs (https et ws) sur le même port. Ce que vous avez est très proche, mais votre configuration pour https.createServer ({options}, gestionnaire), doit être ajustée.
Où vous avez:
var server_https= https.createServer({
key: this.ssl_key,
cert:this.ssl_cert
},respond_to_client).listen(this.port);
Vous devez également ajouter une option pour "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);
La valeur que j'ai utilisée pour "ca" a été le contenu du fichier: intermediaire.crt reçu de l'autorité de signature de certificat.
IMPORTANT
Bien qu'il soit possible de faire fonctionner cela à l'aide d'un certificat auto-signé, je n'ai jamais été en mesure de le faire car il n'y a pas d'autorité de signature.
Ainsi, tout comme vous l'avez fait pour vos autres fichiers de certificat, vous devez également le faire pour le fichier intermediaire.crt.
//Where you read your other cert files: add another.
this.ssl_ca = modules.fs.readFileSync(this.ssl_ca_pathfile);
J'ai trouvé cela difficile et mal documenté. Je ne suis pas un expert en SSL / TSL, cependant une recherche rapide sur le certificat intermédiaire apparaît:
Un certificat intermédiaire est un certificat subordonné émis par la racine approuvée spécifiquement pour émettre des certificats de serveur d'entité finale. Le résultat est une chaîne de certificats qui commence au niveau de l'autorité de certification racine approuvée, via l'intermédiaire et se termine par le certificat SSL qui vous a été délivré. Ces certificats sont appelés certificats racines chaînés. La source
intermediaire.crt aura la structure suivante:
-----BEGIN CERTIFICATE-----
****
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
****
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
****
-----END CERTIFICATE-----
Voici la réponse dans le navigateur.