La sécurité des communications sur internet, et particulièrement des communications Web, représente un enjeu majeur pour les entreprises.
Qu’est-ce que le HTTPS ?
Le protocole HTTP est utilisé par les navigateurs web afin d’échanger des informations entre l’internaute et le site web. Cet échange est réalisé de manière non sécurisée, c’est à dire que n’importe quelle personne qui intercepte la communication peut lire, analyser et modifier les informations.


Afin d’assurer la confidentialité, l’authenticité et l’intégrité des interaction entre l’utilisateur final et le site internet, on utilise le protocole sécurisé HTTPS.
HTTPS, utilise un certificat TLS (anciennement SSL) pour réaliser des opérations cryptographiques sur les communications.
Afin d’expliquer plus facilement le fonctionnement du protocole HTTPS, on peut considérer que ce dernier est constitué du protocole HTTP avec une surcouche de sécurité TLS.


Vous avez dit “certificat TLS” ?
SSL comme TLS sont deux protocoles cryptographique qui servent à chiffrer et authentifier les données qui transitent entre deux machines. Cependant TLS est une version améliorée de SSL.
Au fil des années, de nouvelles versions de ces protocoles ont vu le jour pour faire face aux menaces émergentes et prendre en charge de nouveaux algorithmes de chiffrement plus performants et plus sécurisés.
Mis à part le navigateur web et le site internet, on retrouve d’autres acteurs qui jouent un rôle important pour les communications HTTPS, notamment l’autorité de certification. Cet organisme constitue un tiers de confiance d’un point de vue du navigateur, auprès duquel ce dernier pourra valider l’authenticité du certificat présenté par le site web.


- Demande d’installation d’une connexion sécurisée TLS
- Présentation du certificat
- Vérification du certificat (Validité + signature par un tiers de confiance)
- Échange de données sécurisé
Actuellement, on distingue deux types de communication sécurisées :
- Échange sécurisé de bout en bout;
- échange sécurisé avec l’utilisation d’un proxy chiffrant.
Dans cet article de blog, on va uniquement détaillé la mise en place d’un certificat TLS sur un serveur afin d’obtenir une connexion chiffré de bout en bout.
Pour ce faire on utilisera l’autorité de certification publique Let’s Encrypt sur un système Linux.
Exemple technique de mise en place avec Let’s Encrypt
Let’s Encrypt est un projet soutenu par des organisations telles que Mozilla, Akamai, Cisco Systems, … L’objectif étant de mettre en place une autorité de certification gratuite et facile d’utilisation.
Afin d’obtenir un certificat, Letsencrypt if faudra passer par les étapes suivantes :
- Générer une paire de clés et une demande de signature de certificat (Certificate Signing Request, CSR) ;
- envoyer la demande à un serveur ACME ;
- répondre aux défis d’authentification (challenges) posés par le serveur, permettant au demandeur de prouver qu’il contrôle le(s) domaine(s) demandé(s) ;
- réception du certificat signé en retour.
Pour faciliter la tâche de l’administrateur système, le projet Let’s Encrypt propose un client qui automatise toutes ces tâches.
Pour un cas plus pratique, voici une procédure sur un système Centos 7 à adapter selon vos besoins :
Installation du client Let’s Encrypt
$ sudo yum install letsencrypt
Modification du fichier de configuration du client afin de durcir le chiffrement
$ vim /etc/letsencrypt/cli.ini # This is an example of the kind of things you can do in a configuration file. # All flags used by the client can be configured here. Run Certbot with # "--help" to learn more about the available options. # Use a 4096 bit RSA key instead of 2048 rsa-key-size = 4096 # Uncomment and update to register with the specified e-mail address email = example@example.com # Uncomment and update to generate certificates for the specified # domains. # domains = example.com, www.example.com # Uncomment to use a text interface instead of ncurses # text = True # Uncomment to use the standalone authenticator on port 443 # authenticator = standalone # standalone-supported-challenges = tls-sni-01 # Uncomment to use the webroot authenticator. Replace webroot-path with the # path to the public_html / webroot folder being served by your web server. # authenticator = webroot # webroot-path = /usr/share/nginx/html
La modification de l’attribut rsa-key-size permet d’utiliser une clé RSA de 4096 afin d’améliorer la sécurité des échanges entre le navigateur et le site internet.
L’attribut email est indispensable afin de recevoir une notification une fois que le certificat arrive à expiration.
À ce stade, il ne reste plus qu’à faire la demande des certificats souhaités.
$ certbot certonly -d www.example.com -m example@example.com -c /etc/letsencrypt/cli.ini
$ certbot certonly -d example.com -m example@example.com -c /etc/letsencrypt/cli.ini
L’exemple ci-dessus, permet de faire une demande de deux certificats pour les domaines :
- www.example.com
- example.com
Si la procédure s’est bien déroulée, le certificat et la clé privée sont placés dans le dossier :
/etc/letsencrypt/live/[nom de domaine]
Il vous suffit finalement de modifier le fichier de configuration de votre serveur web afin de prendre en compte ces derniers.
Renouvellement
Par défaut, la durée d’un certificat Let’s Encrypt est de 3 mois.
À la fin de cette période vous allez recevoir un email afin de vous prévenir de l’expiration du certificat ainsi que la possibilité d’effectuer son renouvellement.
Il faudra donc vous connecter sur votre serveur et executer la commande suivante :
$ certbot renew -c /etc/letsencrypt/cli.ini
Le client Let’s Encrypt renouvellera automatiquement les certificats qui arrivent à expiration.
Un simple rechargement de la configuration de votre serveur web suffit pour prendre en charge le nouveau certificat.
Commentaires