by Haruka :: 2013/07/03 :: 2 min read
#applications #cli

Sécuriser un service web avec HTTPS et NGINX

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.