Divers

PASSER SON SITE EN HTTPS

D

Lundi 2 octobre 2017

Mis à jour le mercredi 5 septembre 2018

Passer son site en HTTPS

De nos jours, les sites qui n'ont pas de certificat SSL, c'est-à-dire ceux auxquels on accède encore en HTTP, n'inspirent plus confiance.
Ce tutoriel explique comment passer son site en HTTPS, particulièrement avec un serveur web Nginx, mais la manipulation est similaire sur Apache.

Générer une clé

Tout d'abord, sur votre serveur, il vous faut générer une clé :
openssl req -nodes -newkey rsa:2048 -sha256 -keyout monsite.fr.key -out monsite.fr.csr
Cette commande vous demandera plusieurs informations, vous pouvez les passer en appuyant sur Entrée sauf pour Common Name (e.g. server FQDN or YOUR name) où vous devrez renseigner le nom de domaine que vous souhaitez protéger en HTTPS et Email Address où il est conseillé de renseigner son adresse email, comme ceci :
david@101.52.56.84:~$ openssl req -nodes -newkey rsa:2048 -sha256 -keyout monsite.fr.key -out monsite.fr.csr
Generating a 2048 bit RSA private key
................+++
................+++
writing new private key to 'monsite.fr.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:monsite.fr
Email Address []:monadresse@hotmail.fr

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Cette commande génèrera deux fichiers : monsite.fr.key et monsite.fr.csr.
Ensuite, pour obtenir votre certificat SSL, vous devrez fournir le contenu du fichier monsite.fr.csr à votre organisme de certification. Pour obtenir le contenu de ce fichier, vous pouvez exécuter :
cat monsite.fr.csr
Ce qui vous donnera ceci :
-----BEGIN CERTIFICATE REQUEST-----
9q0hrO8s84Z3RfotwC5hHy0zOV827q5J0Vb3wMJ1K5RchfZH5Y492B3rTzEhG5yZw
HxV4X5cJsD0aTf1lh4cKgL9sAT03cu3qWSxVEO7vh5Mgft38tY62pL8NWP49l7834
5px8KJN85QsnK8q53A9YG6eUv70BsshT9Qf998np31eeW0Y2XvoEpGGOoZVr1v49b
3q6wyI0e8A5TBRJ22ygOgBR3na9JNOkWu9B5X87jxqP4bSh80m7jwX3r6l13fATW4
Cf/e3LzBCS64gjPw6G7C4bk4TG2B8hAK47e68hAF6685+90kXQcJM5/CrxzE8sijv
75leu4ueAXM0BCbm+86ctXMVvc9gJ8pdWOkJrIy6HVv9O3560R6rQW+6l51k+Ph02
Pvbe6u2HD70o4Nhd91KsF5tNtQ70QPzb2gDX2MUrhm2944QJM1SOnBv080Wdmhm67
rHaCg62lx9c6Qn00R3Z23+2gZ4a3XHT/6xudTPo1GsrTR355Wewe39t3W1KIlL7wP
1Pq95Dse5C6oKeUgr5o7e7f857OOA8NNdh7+zpS883iBiBJL7d7eWX1/GEu5f8n6f
g05CbU65c7DxlDFH9eBP3uKIH680X3mUI0y0tv9N0585pnl+8acr2SImph6IIQ4bh
677/kYqfTywp20057MiusG7EnT3UocQPIp965X2V8dO1TB0ZScw20lNMy9Xh1gyd0
uFdq8r5YA3Cc244Jq7TOig5aU/t4MT1gONfx3m215U7Ifm5WV4o9iif0qTX8z75IP
jr4WJF+4DvRXoyWuyj5iYTYEL7R4Rl7gY3m+o5h8824Dt7l65MwA8Ui0w82o7pYa4
KXJ+Nm5P8l0b8301DfR2ayeZx+PJSM8Mgnq6hM4KMK4hqIJJ8742d9fd/002X/hl0
o64C9f6W3p0E7nt0L5xoELNRcgfoc456u34cNO9oWGWSP27+7mSeW1L3vnT1macI9
-----END CERTIFICATE REQUEST-----
Vous devrez fournir la totalité du contenu du fichier.

Prouver que le nom de domaine vous appartient

Ensuite, vous devrez prouver que le nom de domaine vous appartient. Pour cela, votre organisme de certification vous donnera en général trois possibilités :
  • Validation par Record DNS : votre organisme de certification vous donnera une ligne à ajouter à votre zone DNS.
  • Validation par email : votre organisme vous enverra un code sur une adresse email appartenant au domaine que vous souhaitez passer en HTTPS, soit quelquechose@monsite.fr dans notre exemple.
  • Validation par fichier : votre organisme vous fournira un fichier texte que vous devrez déposer sur votre serveur et rendre accessible par un lien spécifique.
Dans tous les cas, c'est votre organisme de certification qui vous donnera les instructions pour vérifier que vous êtes bien le propriétaire du nom de domaine que vous voulez passer en HTTPS.

Installer votre certificat HTTPS

Une fois que votre organisme de certification aura la preuve que vous êtes le propriétaire du nom de domaine, il vous fournira deux fichiers appelés le certificat avec pour extension .crt et l'intermédiaire avec pour extension .pem. Je vous conseille de les renommer de cette façon : monsite.fr.crt et monsite.fr.pem.
A ce stade, vous disposerez de quatre fichiers :
  • monsite.fr.csr : que vous avez fourni à votre autorité de certification.
  • monsite.fr.key : que vous gardez précieusement.
  • monsite.fr.crt : fourni par votre autorité de certification.
  • monsite.fr.pem : fourni par votre autorité de certification.
Il faudra créer un unique fichier avec les deux fournis par votre autorité de certification comme ceci :
cat monsite.fr.crt monsite.fr.pem > monsite.fr.certificate.crt

Reste à intégrer tout ça dans votre serveur web. J'explique les manipulations pour Nginx, mais elles sont similaires pour Apache.
Votre fichier /etc/nginx/conf.d/monsite.fr.conf doit maintenant comporter ces lignes en plus :
server {
        listen 443; # Important, vous devez maintenant écouter le port 443 qui est le port utilisé par le protocole HTTPS
        listen [::]:443;
        server_name www.monsite.fr monsite.fr;
        ssl on;
        ssl_certificate /etc/nginx/ssl/monsite.fr.certificate.crt;
        ssl_certificate_key /etc/nginx/ssl/monsite.fr.certificate.key;
        location / {
                # ... votre configuration
        }
}

Vous pouvez également rajouter un bloc server { } pour rediriger les requêtes HTTP en HTTPS :
server {
    listen 80;
    listen [::]:80;

    server_name www.monsite.fr monsite.fr;

    return 301 https://www.monsite.fr$request_uri;
}

N'oubliez pas de redémarrer Nginx pour que ces nouvelles configurations soient prises en compte :
nginx -t
sudo systemctl reload nginx

Si la commande nginx -t ne fonctionne pas :
david@david:/etc/nginx/conf.d$ nginx -t
-bash: nginx : commande introuvable
C'est que vous devez passer sudo pour l'exécuter :
david@david:/etc/nginx/conf.d$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Pareil pour la commande systemctl reload nginx :
david@david:/etc/nginx/conf.d$ systemctl reload nginx
Failed to reload nginx.service: Access denied
david@david:/etc/nginx/conf.d$ sudo systemctl reload nginx


Vérifier que tout fonctionne

Ouvrez votre navigateur, et allez sur https://www.monsite.fr, et si aucun message d'alerte de sécurité n'apparait, et que vous voyez bien un petit cadenas vert à côté du lien de votre site, c'est que tout fonctionne !



Une erreur ? une question ? une critique ? une faute ? un conseil ? ou tout simplement un merci ?

Lâche ton commentaire