SSL & TLS : Guide du débutant pour tout savoir sur les certificats

Mis à jour le , par Jacky Thierry, dans la catégorie #Sécurité & adminsys

SSL and TLS certificate

A propos de l'auteur

Jacky THIERRY

CTO, Project Manager, Startup owner

Travaillant depuis plus de 15 ans dans le digital, j'ai dirigé de nombreux projets pour des grosses companies mondiales, des agences web, et des associations locales. Je suis spécialisé dans le développement agile avec des équipes outsourcées.

  • Jacky Thierry linkedin
  • Jacky Thierry twitter
  • Jacky Thierry instagram
  • Jacky Thierry RSS feed
Jacky Thierry

Découvrir SSL

1 – Qu’est ce qu’un certificat SSL : Définition

SSL est un protocole utilisé pour sécuriser les échanges électroniques. Il permet de créer un dialogue de confiance entre un émetteur et un récepteur (par exemple un serveur web et un navigateur internet) en garantissant la légitimité de l’émetteur et en chiffrant toutes les données transmises

Afin de permettre ceci, ce protocole utilise des certificats SSL

Ces certificats sont des fichiers créés pour établir une connexion sécurisée entre un serveur et un client (un émetteur et un récepteur)

Les certificats SSL sont délivrés par des autorités de certification (également appelées CA pour Certification Authorities). Ces autorités de certification sont utilisées par les services récepteurs (dans notre exemple précédent, le navigateur internet), pour valider l’authenticité et l’intégrité de l’émetteur (le serveur web)

Ces certificats sont utilisés par de nombreux serveurs, et non seulement par des serveurs web comme dans notre exemple. Ils sont également présents dans des services d’applications métiers, de mails, ssh, ldap, etc..

Aujourd’hui, implémenter des certificats SSL sur ses services est devenu une nécessité et souvent même un prérequis. Heureusement, il est devenu assez facile et peu coûteux (voir même gratuit dans certains cas) de s’en procurer et de les installer

2 – Pourquoi utiliser un certificat SSL : 5 bonne raisons d’implémenter SSL

Comme nous l’avons vu au chapitre précédent, utiliser SSL un devenu un prérequis. Mais pourquoi ?

Réponse courte : pour la sécurité de vos utilisateurs, la crédibilité de votre site/marque/produit et la possibilité d’utiliser des technologies web modernes :

  1. Protection contre des attaques malicieuses comme le phishing (usurpation de service ou d’identité), ou man in the middle (interception des données transmises par un intermédiaire)
  2. Gain d’assurance et de crédibilité auprès de vos utilisateurs. Ils n’achèteront pas sur votre site s’ils ne voient pas le cadenas vert sur celui ci (et pas seulement sur les pages de paiements)
  3. Validation de l’authenticité de l’émetteur. Vous êtes reconnus et certifié par une autorité de certification tierce qui validera votre identité.
  4. Compatibilité avec les évolutions techniques des émetteurs et récepteurs. SSL est maintenant imposé pour bénéficier de certains technologies sur vos services (HTTP2, PWA, etc), et dans un futur proche, les navigateurs internet pourront bloquer les ressources non sécurisées.
  5. Bonus SEO par le moteur de recherche Google, qui favorise le classement des sites utilisant des certificats valides (bien que très légèrement, mais cela pourrait augmenter)

Implémenter SSL sur un site web existant peut être complexe et coûteux : il faut vous assurer que toutes vos pages soient sécurisées, mais également toutes les ressources se trouvant sur celles ci (images, liens, publicités, etc..)

Pour faciliter l’implémentation et réduire les coûts de mise en place, il est donc conseiller d’installer des certificats SSL dès que possible, dès la phase de développement du service.

Comprendre SSL

1 – Comment SSL fonctionne : Explications

Ce que l’on appelle un certificat SSL est un réalité un couple de 2 clefs complémentaires : une clef publique et une clef privée.

La clef publique est librement accessible à tout le monde et sert à chiffrer, tandis que la clef privée est personnelle et ne doit surtout pas être partagée car elle sert à déchiffrer.

Lorsqu’une connexion est initialisée par un client vers un serveur, ce dernier va comparer la clef publique avec la clef privée, et si ces 2 clefs correspondent entre elles, autorisera la connexion. Dans le cas contraire, celle ci sera refusée.

Il existe donc 2 clefs, publique et privée, mais lorsque qu’un autorité de certification délivre ces clefs, il ajoute également une clef de légitimité. Celle ci est liée à un nom de domaine, et garantira l’identité du propriétaire de ce couple de clefs est bien le propriétaire du nom de domaine.

En résumé, il y a 3 fichiers important pour établir une connexion SSL :

  1. Une clef publique, partagée à tout le monde, qui sert à chiffrer les données
  2. Une clef privée, à ne jamais partager, qui sert à déchiffrer les données
  3. Une clef de légitimité qui sert à une autorité de certification à garantir l’identité du détenteur des clefs publiques et privées pour un domaine spécifié

En pratique, voici le process de dialogue SSL entre un client et un serveur SSL :

  1. Le client tente d’accéder à un serveur sécurisé
  2. Le serveur indique qu’il utilise un certificat et envoie les informations techniques au client pour utiliser celui ci
  3. Le client récupère les informations et la clef publique. Il vérifie que l’identité du détenteur de ces clefs est identique à celle du propriétaire du nom de domaine.
  4. Le client chiffre les données gràce à la clefs publique et dialogue avec le serveur de manière sécurisée.

2 – Comment obtenir un certificat SSL : 3 possibilités

Il existe 3 façons différentes de gérer des certificats SSL :

  1. acheter auprès d’un autorité de certification : les plus connus sont OVH, Gandi, Godaddy, …
  2. Générer soir même avec l’autorité Let’s encrypt : plus d’information dans mon guide complet sur Let’s encrypt
  3. Générer soit même un certificat auto signé, sans autorité : je vous décris la procédure dans la suite de cet article

3 – Comment générer un certificat SSL

Générer un certificat SSL est un processus assez simple, comprenant 3 étapes :

  1. Créer le fichier d’informations CSR : On indique ici les informations relatives à notre identité et au nom de domaine associé.
  2. Créer la clef privée KEY : Elle sera générée à partir du fichier CSR, du nom de domaine, et de nos informations personnelles.
  3. Créer la clef publique CRT : Il est possible de la générer soi même via un certificat auto signé (voir chapitre précédent), ou de la générer à l’aide d’une autorité de certification, qui créera le CRT à partir du CSR et de la KEY.RT.

4 – SSL vs TLS : un protocole de chiffrement pour vos certificats

Comme nous l’avons vu précédemment, un certificat n’est qu’un couple de clefs. Pour établir une connexion sécurisée, ces clefs ne suffisent pas, il faut également un protocole de sécurisation.

Ce protocole aura pour objectif d’établir la liaison en fournissant la procédure à respecter au client.

Le premier protocole créé dans ce but est SSL. Sorti par Netscape, il s’implémente au dessus du protocole HTTP, pour donner HTTPS. Il a connu 2 versions majeures (la V1 n’est jamais sorti des laboratoires de Netscape), avant d’être abandonné dans sa verison 3.

L’IETF a repris la gestion du protocole et a sorti en 1999 le protocole TLS, qui n’est qu’une amélioration minime de SSLv3 (on parle également de SSLv3.1).

Depuis, TLS a bien évolué et est maintenant en version 1.2.

Aujourd’hui, le protocole SSL est très déprécié depuis de nombreuses années, et il est fortement recommandé d’utiliser TLS dans sa version 1.2.

Ce que l’on appelle un certificat SSL est donc en réalité un certificat TLS.

Depuis 2014, l’IETF travaille sur la version 1.3 du protocole, qui est sorti en mars 2018, et qui deviendra le protocole de référence une fois que tous les logiciels seront compatibles avec cette version (les navigateurs internet le sont déjà, et on attend une implémentation de celui ci dans les librairies d’OpenSSL au cours de l’année).

Le protocole et sa version à utiliser est définit au niveau du serveur web, les certificats générés ne sont pas dépendants du protocole.

5 – Fichiers et extensions : CRT, PEM, KEY, PKCS …

Il existe de nombreux types de fichiers et d’extensions pour manipuler des certificats. Afin de s’y retrouver facilement par ceux ci, voici un glossaire des extensions :

  • CSR : fichier contenant les indications personnelles pour générer un certificat. Il n’est utilisé que pendant la génération
  • KEY : fichier de clef privée. Sert à déchiffrer
  • CRT / CERT : Fichier de clef publique. Sert à chiffer
  • CER : identique au CRT, extension utilisée par Microsoft
  • PEM : format contenant la clef privée, publique, ou les 2 à la fois (c’est courant d’avoir un fichier PEM comprenant à la fois la clef privée et publique)
  • DER : format binaire d’un certificat (à la place de l’habituel ASCII). Principalement utilisé en java
  • PKCS7 / P7B / P7C : format incluant la clef publique et la clef de légitimité en ASCII base64. Principalement utilisé en java
  • PKCS12 / P12 / PFX : format contenant les clefs publiques et privées, protégé par un mot de passe. Principalement utilisé en java

Générer et convertir des certificats SSL

1 – Créer un certificat auto-signé

Générer un certificat auto-signé peut être utile à des fins d’apprentissage ou de tests sur des versions de développements de votre application.

Attention à ne jamais utilisé de certificat auto-signé en production, ils ne seront pas reconnu par les clients (navigateurs internet, mails, etc) qui afficheront un message d’alerte de sécurité à vos utilisateurs.

Pour créer un certificat auto-signé, il faut dans un premier temps générer les fichiers d’informations CSR et la clef privée KEY :

openssl req -nodes -newkey rsa:2048 -keyout /etc/ssl/certifssl.key -out /etc/ssl/certifssl.csr

Country Name (2 letter code) [AU]: FR
State or Province Name (full name) [Some-State]: Ile de France
Locality Name (eg, city) []: Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Isicca
Organizational Unit Name (eg, section) []: Blog
Common Name (eg, YOUR name) []: www.isicca.com
Email Address []: xxx@isicca.com
A challenge password []:
An optional company name []:

Ensuite, il suffit de générer la clef publique à partir des 2 fichiers précédents :

openssl x509 -req -in /etc/ssl/certifssl.csr -signkey /etc/ssl/certifssl.key -out /etc/ssl/certifssl.crt -days 999

A la fin de ces 2 commandes, vous aurez vous 3 fichiers :

  1. Fichier d’information CSR : /etc/ssl/certifssl.csr
  2. Fichier de clef privée KEY : /etc/ssl/certifssl.key
  3. Fichier de clef publique CRT : /etc/ssl/certifssl.crt

2 – Afficher et convertir des fichiers SSL

2.1 Afficher un certificat PEM

openssl x509 -in certificate.pem -text -noout

2.2 Afficher un certificat DER

openssl x509 -in certificate.der -inform der -text -noout

2.3 Convertir un certificat PKCS12 vers PEM

openssl pkcs12 -in certificate.p12 -out certificate.pem -nodes

2.4 Convertir un certificat PEM vers PKCS7

openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer

2.5 Convertir un certificat PKCS7 vers PEM

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer

2.6 Convertir un certificat PEM vers PKCS12

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

2.7 Convertir un certificat PKCS12 vers PEM

openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

2.8 Convertir un certificat PKCS7 vers PKCS12

openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

2.9 Convertir un certificat PEM vers DER

openssl x509 -in certificate.crt -outform der -out certificate.der

2.10 Convertir un certificat DER vers PEM

openssl x509 -in certificate.crt -inform der -outform pem -out certificate.pem