Mon premier certificat

le 15/11/2016 par Tanguy Patte
Tags: SRE

Mon premier certificat

Je dois passer mon site en https mais je ne sais pas comment faire

– Pour passer ton site en https, il te faut un certificat, et tu vas voir, ce n'est pas très compliqué.

– Un certifiquoi ?

– Un certificat. Les certificats permettent de chiffrer les messages et d'authentifier.

— Et en français, ça veut dire quoi ?

— Ça te permet d'authentifier, c'est à dire vérifier l'identité de la personne / entreprise. Dans ton cas, ça permettra aux utilisateurs de ton site de s'assurer que le site appartient bien à ton entreprise. La partie chiffrement permet de faire en sorte que seul toi puisse lire le message, il est incompréhensible pour les autres car ils n'ont pas la clé pour le déchiffrer.

– Et ça marche comment ?

– Pour le chiffrement asymétrique, tu as deux clés de chiffrement. Une clé privée que tu ne dois surtout pas diffuser et une clé publique que tu peux partager à tout le monde.

clé publique: clé publique

clé privée: clé privée

Avec ces deux clés, tu vas pouvoir chiffrer, déchiffrer et signer des messages

Chiffrer / Déchiffrer

Si quelqu'un veut m'envoyer un message que seul moi puisse lire, il doit chiffrer le message avec ma clé publique :

message+clé publique=message chiffré

Pour lire le contenu du message chiffré, je vais utiliser ma clé privée pour déchiffrer le message :

message chiffré+clé privée=message

Signer un message

Si je veux envoyer un message à quelqu'un et qu'il soit sûr que ce soit moi qui l'ait écrit, je peux signer le message avec ma clé privée :

message+clé privée=message signé

Les autres peuvent lire le message et vérifier la signature grâce à ma clé publique

message signé+clé publique=message+personne authentifiée

Ok, je commence à comprendre, mais le certificat dans tout ça c'est quoi ?

– Ok, je commence à comprendre, mais le certificat dans tout ça c'est quoi ?

– Le certificat va être un document qui reprend ta clé publique, des informations te concernant et sera signé par une autorité de certification.

– Tu m'as de nouveau perdu.

– Le certificat va contenir ta clé publique qui permettra aux autres de chiffrer les messages qui te sont destinés.

– Ok

– Il y a les informations concernant le propriétaire du certificat (tel que le nom de l'entreprise, un email…) et le nom de domaine associé.

– Et c'est quoi cette histoire d'autorité de certification ?

– Le certificat est signé par une autorité de certification. C'est un tier de confiance. Il est chargé de garantir que le nom de domaine t'appartient bien et que les informations que tu as saisies sont correctes. C'est ce qui va garantir à tes utilisateurs qu'ils communique bien avec toi et pas un site pirate qui se fait passé pour toi.

– D'accord. J'y vois un peu plus clair mais concrètement, comment on fait ?

– On va procéder par étapes. Suis le guide.

Création du couple clé privée / clé publique

On va commencer par créer les clés. Pour cela on va utiliser openssl avec la commande suivante :

$ openssl genrsa 2048 > mon-domaine.fr.key

Ça va créer un fichier contenant la clé privée (la clé publique pouvant être générée à partir de la clé privée).

$ ls
mon-domaine.fr.key

Il ne faut pas diffuser ce fichier car il contient la clé privée.

(clé privée)

Création du CSR (Certificat Signing Request)

Le CSR est le fichier qui va contenir les informations sur le demandeur du certificat et la clé publique générée précédement. C'est ce fichier que l'on va envoyer à une autorité de certification pour qu'elle nous signe le certificat.

$ openssl req -new -key mon-domaine.fr.key > mon-domaine.fr.csr
…
Common Name (e.g. server FQDN or YOUR name) []:mon-domaine.fr
Email Address []:john.doe@mon-domaine.fr
…

Il est possible de vérifier le contenu du CSR avec la commande suivante :

$ openssl req -text -noout -verify -in mon-domaine.fr.csr
verify OK
Certificate Request:
Data:
    Version: 0 (0x0)
    Subject: C=FR, ST=Paris, L=Paris, O=mon entreprise, CN=mon-domaine.fr/emailAddress=john.doe@mon-domaine.fr
    Subject Public Key Info:
    …

Le fichier mon-domaine.fr.csr contient donc notre clé publique et nos informations :

(clé publique+informations personnelles)

Il faut ensuite envoyer le CSR à une autorité de certification qui va signer cette demande et nous fournira le certificat une fois les informations contrôlées.

(clé publique+informations personnelles+signature)

Installation du certificat

Une fois le certificat reçu, il ne reste plus qu'à l'installer. On peut regarder ce qu'il contient avec la commande suivante :

$ openssl x509 -text -noout  -in mon-domaine.fr.cert

Voici un exemple pour installer le certificat pour nginx :

$ ls /etc/nginx/ssl
mon-domaine.fr.cert
mon-domaine.fr.key

$ cat /etc/nginx/sites-enabled/mon-domaine.fr.conf
server {
    listen              443 ssl;
    server_name         mon-domaine.fr;
    ssl_certificate     /etc/nginx/ssl/mon-domaine.fr.cert;
    ssl_certificate_key /etc/nginx/ssl/mon-domaine.fr.key;
    …
}

Prix

Les certificats sont en général payant. Il existe néanmois quelques alternatives gratuites tel que StartSSL et Let's Encrypt.