Note: Ce tutoriel fait suite à un autre tutoriel posté il y a quelques années sur ce blog. N’hésitez donc pas à lire « Signez vos certificats avec la CaCert » avant de vous lancer dans celui-ci!
Après avoir installé et configuré votre serveur web Nginx, vous vous dites que chiffrer la connexion entre votre serveur et votre ordinateur serait une bonne solution pour protéger vos mots de passes des méchants pirates, surtout si vous vous connectez depuis des connexions internet partagées avec des inconnus (que ce soit dans un lieu public, à votre travail, et même chez vous). C’est ce que nous allons voir à travers ce petit tutoriel.
Organiser ses certificats
Pour nous y retrouver plus facilement, je vous propose de regrouper tous vos certificats dans un seul et même dossier. Nous allons donc commencer par copier les trois fichiers certificat.pem, certificat_csr.pem et certificat_privatekey.pem dans le dossier /etc/nginx/ssl. Pour ce faire, déplacez-vous dans le dossier contenant vos certificats (/root/nom_certificat si vous avez suivi mon précédent tutoriel), et entrez la commande suivante:
cp * /etc/nginx/ssl
Créer un fichier CRT racine
Nginx a beau être un excellent serveur web, il possède une énorme lacune. En effet, contrairement à Apache, il ne supporte pas l’utilisation de certificats racine, pourtant nécessaire à la bonne authentification de la connexion par le navigateur.
Pour passer outre ce problème, nous allons devoir générer un fichier CRT, fruit de la fusion de notre fichier certificat.pem et du fichier racine de la CaCert. Pour ce faire, exécutez simplement la ligne suivante dans votre terminal, qui s’occupe de concaténer (via la commande cat) les deux fichiers dans un troisième, appelé certificat_crt.pem (grâce à l’opérateur >):
cat certificat.pem /etc/ssl/certs/cacert.org.pem > certificat_crt.pem
Une fois ceci fait, nous allons pouvoir configurer Nginx pour qu’il utilise notre certificat.
Configurer ses domaines
Une fois nos certificats générés et prêts à être utilisés, nous pouvons passer à la seconde partie: l’intégration de ces certificats dans Nginx. Ici, nous allons nous intéresser à deux situations possibles:
- Vous souhaitez que votre site soit accessible à la vois via son adresse en http:// et en https://
- Vous souhaitez que votre site ne soit accessible que via son adresse en https://, et que son adresse en http:// vous redirige vers elle
Dans les deux cas, vous allez devoir éditer les fichiers de configuration présent dans le dossier /etc/nginx/sites-enabled. Pour ce faire, vous pouvez utiliser un éditeur en mode console, comme nano ou vim.
Première situation
Dans cette situation, l’utilisateur aura le choix entre surfer sur http://votresite.com/ ou sur https://votresite.com/. Cela peut être utile dans le cas d’un petit site web/blog, qui ne nécessite pas toujours d’entrer des informations dites « sensibles » (mots de passe, numéro de carte bancaire, etc.).
Dans chaque fichier de configuration, repérez ces deux lignes:
server {
listen 80;
[...]
et modifiez-les en suivant mon exemple commenté (un commentaire commence par un dièse et ne sera pas pris en compte par Nginx). Les lignes ajoutées sont surlignées:
server {
listen 80; # On garde la connexion non sécurisée sur le port 80
listen 443 ssl; # Et on ajoute une connexion chiffrée (notez le « ssl ») sur le port 443, qui est le port standard pour le protocole https
ssl_certificate /etc/nginx/ssl/certificat_crt.pem; # Adresse de notre CRT racine
ssl_certificate_key /etc/nginx/ssl/certificat_privatekey.pem; # Adresse de notre clé privée
[...]
Deuxième situation
Dans cette situation, lorsque l’utilisateur entrera http://votresite.com/, il sera automatiquement redirigé vers https://votresite.com/. C’est la solution à adopter si votre site nécessite d’entrer des informations qui peuvent être considérées comme « sensibles ».
Dans chaque fichier de configuration, repérez ces trois lignes:
server {
listen 80;
server_name votresite.com;
[...]
et modifiez-les en suivant mon exemple commenté (un commentaire commence par un dièse et ne sera pas pris en compte par Nginx). Les lignes ajoutées sont surlignées:
# Version HTTP : redirection automatique
server {
listen 80; # Pour le port 80 (http)
server_name votresite.com; # Et le domaine votresite.com
return 301 https://$host$request_uri; # On redirige vers la version https
}
# Version HTTPS
server {
listen 443 ssl; # Pour le port 443 (https)
ssl_certificate /etc/nginx/ssl/certificatcrt.pem; # Adresse de notre CRT racine
ssl_certificate_key /etc/nginx/ssl/certificatprivatekey.pem; # Adresse de notre clé privée
server_name votresite.com; # Et le domaine votresite.com
[...]
Le moment de vérité
Une fois ceci fait, il ne vous reste plus qu’à redémarrer Nginx:
service nginx restart
Et voilà. Votre serveur utilise maintenant votre certificat signé par la CaCert. Enjoy!