Sécuriser un service web avec HTTPS et NGINX


Suite a mes deux articles sur Piwik et sur les agrégateurs de flux RSS, je me suis penché sur la question de la sécurité avec HTTPS et NGINX, car ce sont des services auto-hébergés auxquels j'accède au travers d'Internet.

Jusqu'à présent, lorsque je me connectai à ces deux services, mon login et mon mot de passe circulaient en clair sur Internet, de mon PC jusqu'au serveur, n'importe qui pouvant alors les récupérer. J'ai donc mis en place une connexion sécurisée au travers du protocole HTTPS et d'un cryptage asymétrique par clé et certificat.

Ça parait compliqué comme ça mais vous allez voir que c'est très facile.

Création du certificat et de la clé

sudo mkdir /etc/nginx/openssl
cd /etc/nginx/openssl
sudo openssl req -new -x509 -days 1826 -nodes -out server.crt -keyout server.key


Modification du virtualhost

Afin que le site web utilise HTTPS il faut modifier son virtualhost. Dans mon cas il se trouve dans /etc/nginx/sites-enabled.

server {
[...]
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/openssl/server.crt;
ssl_certificate_key /etc/nginx/openssl/server.key;
[...]
}


Rediriger HTTP vers HTTPS

Maintenant, pour rediriger automatiquement les requêtes HTTP (port 80) vers HTTPS (port 443), il faut ajouter une deuxième section "server {}" au tout début du virtualhost.

server {
listen 80;
server_name localhost;
return 301 https://$server_name$request_uri;
}

Remplacez localhost par votre adresse IP publique ou votre nom de domaine, si besoin.


Pensez à ouvrir le port 443 sur votre firewall et redémarrez NGINX avec la commande :

sudo service nginx restart

Désormais en accédant à votre site vous serez automatiquement rediriger vers une connexion sécurisée. Le certificat n'étant pas connu de votre navigateur, un message de prévention vous sera affiché. Ajoutez simplement votre certificat au navigateur pour pourvoir accéder directement au site.

Un article à retrouver sur P3ter.fr
Vus : 1125
Publié par P3ter : 34