J'essaie de faire fonctionner HTTPS sur express.js pour le nœud, et je ne peux pas le comprendre.
Ceci est mon app.js
code.
var express = require('express');
var fs = require('fs');
var privateKey = fs.readFileSync('sslcert/server.key');
var certificate = fs.readFileSync('sslcert/server.crt');
var credentials = {key: privateKey, cert: certificate};
var app = express.createServer(credentials);
app.get('/', function(req,res) {
res.send('hello');
});
app.listen(8000);
Lorsque je l'exécute, il semble ne répondre qu'aux requêtes HTTP.
J'ai écrit une node.js
application HTTPS simple à base de vanille :
var fs = require("fs"),
http = require("https");
var privateKey = fs.readFileSync('sslcert/server.key').toString();
var certificate = fs.readFileSync('sslcert/server.crt').toString();
var credentials = {key: privateKey, cert: certificate};
var server = http.createServer(credentials,function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
});
server.listen(8000);
Et quand je lance cette application, il ne répondre aux demandes HTTPS. Notez que je ne pense pas que le toString () sur le résultat fs importe, car j'ai utilisé des combinaisons des deux et toujours pas d'es bueno.
MODIFIER POUR AJOUTER:
Pour les systèmes de production, vous feriez probablement mieux d'utiliser Nginx ou HAProxy pour proxy des requêtes vers votre application nodejs. Vous pouvez configurer nginx pour gérer les requêtes SSL et parler simplement http à votre nœud app.js.
MODIFIER POUR AJOUTER (4/6/2015)
Pour les systèmes utilisant AWS, il vaut mieux utiliser les équilibreurs de charge élastiques EC2 pour gérer la terminaison SSL et autoriser le trafic HTTP régulier vers vos serveurs Web EC2. Pour plus de sécurité, configurez votre groupe de sécurité de sorte que seul l'ELB soit autorisé à envoyer du trafic HTTP vers les instances EC2, ce qui empêchera le trafic HTTP non chiffré externe de toucher vos machines.
Réponses:
Dans express.js (depuis la version 3), vous devez utiliser cette syntaxe:
De cette façon, vous fournissez un middleware express au serveur http / https natif
Si vous souhaitez que votre application s'exécute sur des ports inférieurs à 1024, vous devrez utiliser la
sudo
commande (non recommandée) ou utiliser un proxy inverse (par exemple nginx, haproxy).la source
localhost:80
mais pashttps://localhost:443
Tout d'abord, vous devez créer des fichiers selfsigned.key et selfsigned.crt . Accédez à Créer un certificat SSL auto-signé ou procédez comme suit.
Accédez au terminal et exécutez la commande suivante.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./selfsigned.key -out selfsigned.crt
la source
J'ai rencontré un problème similaire avec l'obtention de SSL pour travailler sur un port autre que le port 443. Dans mon cas, j'avais un certificat de bundle ainsi qu'un certificat et une clé. Le certificat de bundle est un fichier qui contient plusieurs certificats, le nœud nécessite que vous divisiez ces certificats en éléments distincts d'un tableau.
Dans app.js, vous devez spécifier https et créer le serveur en conséquence. Assurez-vous également que le port que vous essayez d'utiliser autorise réellement le trafic entrant.
la source
Y compris les points:
Gestion HTTP et WS
Configuration SSL
Dans Sailsjs, il y a deux façons de configurer toutes les choses, la première consiste à configurer dans le dossier config avec chacun a ses fichiers séparés (comme la connexion à la base de données concernant les paramètres se trouve dans connections.js). Et le second est de configurer la structure de fichier de base de l'environnement, chaque fichier d'environnement se présente dans
config/env
dossier et chaque fichier contient des paramètres pour un environnement particulier.Sails regarde d'abord dans le dossier config / env puis attend avec impatience config / * .js
Permet maintenant de configurer ssl
config/local.js
.Ou dans production.js
Redirection http / https & ws / wss
Ici, ws est Web Socket et wss représente Secure Web Socket, car nous configurons ssl puis maintenant http et ws les deux demandes deviennent sécurisées et se transforment respectivement en https et wss.
Il existe de nombreuses sources de notre application qui recevront une demande comme tout article de blog, publication sur les réseaux sociaux, mais notre serveur ne fonctionne que sur https, donc lorsque toute demande provient de http, il affiche l'erreur "Ce site est inaccessible" dans le navigateur du client. Et nous perdons le trafic de notre site Web. Nous devons donc rediriger la requête http vers https, les mêmes règles autorisent le websocket sinon le socket échouera.
Nous devons donc exécuter le même serveur sur le port 80 (http) et détourner toutes les demandes vers le port 443 (https). Sails compile d'abord le fichier config / bootstrap.js avant de lever le serveur. Ici, nous pouvons démarrer notre serveur express sur le port 80.
Dans config / bootstrap.js (créer un serveur http et rediriger toutes les demandes vers https)
la source
Utilisez greenlock-express: SSL gratuit, HTTPS automatisé
Greenlock gère l'émission et le renouvellement des certificats (via Let's Encrypt) et la redirection http => https, .
express-app.js
:server.js
:Screencast
Regardez la démonstration QuickStart: https://youtu.be/e8vaR4CEZ5s
Pour Localhost
Répondre à cette question à l'avance, car c'est une question de suivi courante:
Vous ne pouvez pas avoir de certificats SSL sur localhost. Cependant, vous pouvez utiliser quelque chose comme Telebit qui vous permettra d'exécuter des applications locales comme de vraies.
Vous pouvez également utiliser des domaines privés avec Greenlock via des défis DNS-01, qui sont mentionnés dans le README avec divers plugins qui le prennent en charge.
Ports non standard (c'est-à-dire non 80/443)
Lisez la note ci-dessus à propos de localhost - vous ne pouvez pas non plus utiliser de ports non standard avec Let's Encrypt.
Cependant, vous pouvez exposer vos ports internes non standard en tant que ports standard externes via le port forward, sni-route ou utiliser quelque chose comme Telebit qui fait le routage SNI et le port forwarding / relaying pour vous.
Vous pouvez également utiliser des défis DNS-01, auquel cas vous n'aurez pas besoin d'exposer les ports du tout et vous pouvez également sécuriser des domaines sur des réseaux privés de cette façon.
la source
C'est comme ça que ça marche pour moi. La redirection utilisée redirigera également tous les http normaux.
la source
Ceci est mon code de travail pour express 4.0 .
express 4.0 est très différent de 3.0 et d'autres.
4.0 vous avez le fichier / bin / www, que vous allez ajouter https ici.
"npm start" est la manière standard de démarrer le serveur express 4.0.
La fonction readFileSync () doit utiliser __dirname obtenir le répertoire courant
tandis que require () utilise ./ réfère au répertoire courant.
Vous mettez d'abord le fichier private.key et public.cert dans le dossier / bin, c'est le même dossier que le fichier WWW .
la source