Cet article explique comment sécuriser votre serveur express.js avec HTTPS en utilisant les certificats de crypte, et améliorer davantage la sécurité avec HSTS et les paramètres Diffie-Hellman plus forts.
Dans le paysage numérique d'aujourd'hui, HTTPS n'est pas négociable. Il est attendu par les utilisateurs, un facteur de classement Google et les navigateurs mettent activement en évidence les sites qui le manquent. Ce didacticiel montre l'ajout d'un certificat Let's Encrypt à votre application express.js. Cependant, la sécurité côté client est tout aussi vitale; Nous explorerons l'application des connexions cryptées aux serveurs externes, même lorsqu'ils ne sont pas activés par défaut. (Remarque: Pour la configuration SSL proxy inverse Nginx avec une application de nœud, consultez notre pointe rapide, «Configuration de Nginx et SSL avec Node.js».)
Prise des clés:
https
permet une communication client sécurisée. Cela nécessite des certificats SSL, facilement obtenus et exempts de Let's Encrypt. https partout:
La norme HTTP / 2 (RFC 7540, mai 2015) oblige le chiffrement, faisant de HTTPS la valeur par défaut. Cela stimule l'adoption de HTTPS. Du point de vue d'un navigateur, atteindre le niveau IP implique ces couches:
https est HTTP sur SSL / TLS, héritant des règles HTTP lors de l'ajout: Authentification via des clés et des certificats; Communication cryptée et asymétrique pour la vie privée et la confidentialité; et l'intégrité des données grâce à la transmission de sabotage. Contrairement aux perceptions passées, les frais généraux SSL / TLS sont minimes, même pour les opérations à grande échelle comme Google (moins de 1% de charge CPU et 2% de frais généraux de réseau). Comme l'a déclaré Ilya Grigorik, le seul goulot d'étranglement des performances est insuffisant l'utilisation de HTTPS.
TLS 1.3 est la dernière version, succédant SSL 3.0 (mais pas interopérable). Il utilise trois canaux cryptés: les chaînes de certificat, la cryptographie de clé publique pour l'échange de clés et la cryptographie symétrique pour le transfert de données. SHA2 ou des algorithmes de hachage plus forts sont recommandés (SHA1 est obsolète). La croissance des données vialise la demande des utilisateurs de carburant pour une sécurité en ligne améliorée. L'extension du navigateur HTTPS Everywhere de l'EFF applique le cryptage dans la mesure du possible, y compris les demandes de réécriture de sites avec une prise en charge HTTPS partielle ou un blocage entièrement HTTP.
Communication de base:
La validation du certificat implique la vérification de la signature, de la date d'expiration, de la chaîne de racines de confiance et de l'état de révocation. Certificats d'émission de certificats de confiance (CAS); Le compromis d'un CA révoque tous ses certificats. La séquence de poignée de main HTTPS: initialisation du client, certificat et message d'échange de clés à partir du serveur, de l'échange de clés du client et de la spécification de chiffre, de la confirmation du serveur et de la fermeture de la poignée.
Cette séquence est indépendante de HTTP; HTTPS n'a modifié la manutention des socket. Les demandes HTTP restent, mais le socket crypte le contenu (en-têtes et corps).
Implémentation https dans express.js:
Node.js utilise le module https
pour la communication sécurisée. Son utilisation reflète le module http
:
const https = require("https"), fs = require("fs"); const options = { key: fs.readFileSync("/srv/www/keys/my-site-key.pem"), cert: fs.readFileSync("/srv/www/keys/chain.pem") }; const app = express(); app.use((req, res) => { res.writeHead(200); res.end("hello world\n"); }); app.listen(8000); https.createServer(options, app).listen(8080);
remplacer /srv/www/keys/my-site-key.pem
et /srv/www/keys/chain.pem
par vos chemins de certificat générés (expliqués ci-dessous).
Génération de certificat avec certificat:
CERTBOT ATTALATS, cryptant la génération et la gestion des certificats. Installer CERTBOT (les instructions varient selon le système d'exploitation; cet exemple utilise Ubuntu):
sudo apt-get update sudo apt-get install software-properties-common sudo add-apt-repository universe sudo add-apt-repository ppa:certbot/certbot sudo apt-get update
Le plugin certonly --webroot
simplifie la génération et la vérification des certificats. Run:
certbot certonly --webroot -w /var/www/example/ -d www.example.com -d example.com
Fournissez votre adresse e-mail. La sortie affiche des chemins vers votre clé privée et vos fichiers de certificat; Utilisez-les dans l'objet options
ci-dessus.
Améliorations de sécurité:
const helmet = require("helmet"); // ... app.use(helmet());
openssl dhparam -out /var/www/example/sslcert/dh-strong.pem 2048
Ajouter dhparam
à l'objet options
:
const options = { // ... dhparam: fs.readFileSync("/var/www/example/sslcert/dh-strong.pem") };
Conclusion:
https est essentiel. Node.js propose des options SSL / TLS robustes pour les applications Web sécurisées. Saisissons la gestion des certificats, tandis que les HST et les paramètres DH plus forts améliorent encore la sécurité.
La section FAQ a été omise par la concision, mais les informations fournies couvrent les aspects principaux du texte d'origine.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!