Certificats

L'une des formes de cryptographie les plus répandues de nos jours est la cryptographie par clé publique. La cryptographie par clé publique utilise une clé publique et une clé privée. Ce système chiffre une information en utilisant une clé publique. L'information ne peut alors être déchiffrée qu'en utilisant la clé privée.

Un usage courant de la cryptographie par clé publique est le chiffrement du trafic réseau d'une application en utilisant SSL (Secure Socket Layer) ou TLS (Transport Layer Security). Par exemple lorsque l'on configure Apache pour utiliser HTTPS, le protocole HTTP par dessus de SSL. Ceci permet de chiffrer le trafic en utilisant un protocole qui ne propose pas lui-même de chiffrement.

Un certificat est une méthode utilisée pour distribuer une clé publique et d'autres informations à propos d'un serveur et de l'organisation responsable de ce serveur. Les certificats peuvent être signés numériquement par une autorité de certification (Certification Authority - CA) ou AC. Une autorité de certification est un tiers de confiance attestant de la véracité des informations contenues dans le certificat.

Types de certificats

Dans la plupart des cas, pour configurer un serveur sécurisé utilisant le chiffrement par clé publique, vous envoyez votre demande de certificat (avec votre clé publique) à l'autorité de certification, accompagné d'une preuve de votre identité et de votre paiement. La CA vérifie votre identité et la demande de certificat, puis vous renvoie un certificat pour votre serveur sécurisé. Une alternative consiste a créer votre propre certificat auto-signé.

Notez bien que les certificats auto-signés ne devraient pas être utilisés dans la plupart des environnements de production.

Pour continuer sur l'exemple de HTTPS, un certificat signé par une autorité de certification (CA) fournit deux fonctionnalités importantes absentes dans un certificat auto-signé :

  • Les navigateurs reconnaissent (généralement) automatiquement le certificat et permettent l'établissement d'une connexion sécurisée sans intervention de l'utilisateur.

  • Lorsqu'une autorité de certification (CA) émet un certificat, cela garantit l'identité de l'organisation qui fournit les pages Web au navigateur.

Most Web browsers, and computers, that support SSL have a list of CAs whose certificates they automatically accept. If a browser encounters a certificate whose authorizing CA is not in the list, the browser asks the user to either accept or decline the connection. Also, other applications may generate an error message when using a self-signed certificate.

Le processus d'acquisition d'un certificat signé par un CA est relativement simple et facile. En voici un survol rapide :

  1. Créez une paire de clefs privé et publique.

  2. Créez une demande de certificat basée sur la clé publique. La demande de certificat contient les informations concernant votre serveur et la société qui l'héberge.

  3. Envoyez votre demande de certificat, avec les documents prouvant votre identité, à l'autorité de certification (CA). Nous ne pouvons pas vous dire quelle autorité de certification choisir. Votre décision peut être basée sur votre expériences passée, ou sur l'expérience de vos amis ou collègues, ou simplement sur des considérations financières.

    Une fois l'autorité de certification choisie, vous devez suivre les instructions qu'ils vous ont indiquées pour obtenir un certificat de leur part.

  4. Quand l'autorité de certification est sûre que vous êtes celui que vous prétendez être, elle vous envoie un certificat numérique.

  5. Installez ce certificat sur votre serveur sécurisé, et configurez les applications appropriées pour utiliser le certificat.

Génération d'une demande de signature de certificat (Certificate Signing Request ou CSR)

Que vous ayez obtenu votre certificat d'une autorité de certification, ou qu'il s'agisse d'un certificat auto-signé, la première étape consiste à générer une clé.

Lorsqu'un certificat est utilisé par des démons tels que Apache, Postfix, Dovecot etc., avoir une clé sans phrase de passe est souvent convenable. Ne pas avoir de phrase de passe permet le démarrage automatique de ces démons, ce qui est généralement préférable.

Cette section décrit la mise en place d'une clé avec et sans phrase de passe. La clé sans phrase de passe sera ensuite utilisée pour générer un certificat pouvant servir pour divers services ou démons.

L'utilisation de votre service sécurisé sans phrase de passe est utile car ces services peuvent démarrer sans que vous ayez à saisir cette phrase à chaque fois. Mais cela peut constituer une faille de sécurité pouvant mettre en danger tout le serveur.

Pour générer les clés pour une demande de signature de certificat (CSR), exécutez la commande suivante dans un terminal :

openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
..........................++++++
.......++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:

Vous pouvez maintenant saisir votre mot de passe. Pour une meilleure sécurité, il doit contenir au minimum huit caractères. La longueur minimum lorsque vous spécifiez -des3 (algorithme de cryptographie) est de quatre caractères. Il devrait contenir des chiffres et/ou des signes de ponctuation et ne pas se trouver dans un dictionnaire de mots. Rappelez vous également que votre mot de passe est sensible à la casse (NdT : au sens typographique majuscules/minuscules).

Re-saisissez le mot de passe pour vérification. Lorsque vous l'avez retapé correctement, la clé du serveur est générée et stockée dans le fichier server.key.

Créez maintenant le clef non sécurisée (celle sans phrase de passe) et échangez le nom des clés :

openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.secure
mv server.key.insecure server.key

La clé non sécurisée se nomme maintenant server.key et vous pouvez utiliser ce fichier pour générer le CSR sans saisir de mot de passe.

Pour créer la CSR, lancer la commande suivante dans un terminal :

openssl req -new -key server.key -out server.csr

Il vous sera alors demandé d'entrer la phrase de passe. Si elle est correcte, il vous sera alors demandé d'entrer le nom de l'entreprise, le nom du site, courriel, etc. Une fois toutes ces informations renseignées, votre CSR sera créé et conservé dans le fichier server.csr.

Vous pouvez maintenant soumettre ce fichier CSR à une autorité de certification (CA) pour traitement. La CA utilisera ce fichier CSR et émettra le certificat. D'un autre côté, vous pouvez créer un certificat auto-signé en utilisant ce CSR.

Création d'un certificat auto-signé (Self-Signed Certificate ou SSC)

Pour créer le certificat auto-signé, utilisez la commande suivante dans un terminal :

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

La commande ci-dessus vous demandera de saisir votre mot de passe. Une fois le mot de passe correct saisi, votre certificat sera créé et stocké dans le fichier server.crt.

Si votre serveur doit être utilisé dans un environnement de production, vous avez probablement besoin d'un certificat signé par une autorité de certification. Il n'est pas recommandé d'utiliser un certificat auto-signé.

Installation du certificat

Vous pouvez installer le fichier de clé server.key et le fichier de certificat server.crt, ou le fichier de certificat émis par votre autorité de certification, en exécutant les commandes suivantes dans un terminal :

sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private

Vous devez maintenant simplement configurer les applications ayant la capacité d'utiliser le chiffrement par clé publique, pour qu'elles utilisent les fichiers de certificat et de clé. Par exemple, Apache peut servir les documents en HTTPS, Dovecot peut servir le courrier en IMAPS et POP3S, etc.

Autorité de certification

Si les services de votre réseau nécessitent plusieurs certificats, il peut être intéressant de mettre en place votre propre autorité de certification (AC) interne. En effet, cela permet aux différents services utilisant des certificats de faire confiance aisément aux autres services utilisant des certificats émis par la même AC.

  1. Créez d'abord les répertoires qui hébergeront le certificat de l'AC et ses divers fichiers :

    sudo mkdir /etc/ssl/CA
    sudo mkdir /etc/ssl/newcerts
    
  2. L'AC a besoin de quelques fichiers supplémentaires pour être opérationnelle. Un pour garder trace du dernier numéro de série utilisé par l'AC (chaque certificat doit avoir un numéro de série distinct) et un autre pour garder trace des certificats générés :

    sudo sh -c "echo '01' > /etc/ssl/CA/serial"
    sudo touch /etc/ssl/CA/index.txt
    
  3. Le troisième fichier est celui des paramètres de l'AC. Bien qu'il ne soit pas strictement nécessaire, il est utile lors de la génération de plusieurs certificats. Modifiez /etc/ssl/openssl.cnf et changez la déclaration [ CA_default ] :

    dir             = /etc/ssl/                              # Répertoire où sont tous les fichiers
    database        = $dir/CA/index.txt           # Fichier index de la base de données.
    certificate     = $dir/certs/cacert.pem     # Le certificat de l'AC
    serial          = $dir/CA/serial                    # Le numéro de série actuel
    private_key     = $dir/private/cakey.pem  # La clé privée
    
  4. Ensuite, créez le certificat racine auto-signé :

    openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
    

    Il vous sera demandé de donner les renseignements concernant le certificat.

  5. Installez maintenant le certificat racine et la clef :

    sudo mv cakey.pem /etc/ssl/private/
    sudo mv cacert.pem /etc/ssl/certs/
    
  6. Vous êtes maintenant prêts à signer des certificats. Le premier élément nécessaire est un Certificate Signing Request (CSR) (plus de détails sont disponibles sur Génération d'une demande de signature de certificat (Certificate Signing Request ou CSR)). Une fois que vous avez un CSR, entrez ce qui suit pour générer un certificat signé par le CA:

    sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf
    

    Après avoir saisi un mot de passe pour la clé de l'AC, il vous sera demandé de signer le certificat. Une somme importante de données défileront ensuite à l'écran durant la création du certificat.

  7. Il devrait maintenant y avoir un nouveau fichier, /etc/ssl/newcerts/01.pem, contenant la même sortie. Copiez et collez toutes les lignes à partir de : -----BEGIN CERTIFICATE----- jusqu'à la ligne : -----END CERTIFICATE----- dans un fichier nommé selon le nom d'hôte du serveur ou le certificat sera installé. Par exemple courriel.exemple.com.crt est un nom suffisamment précis.

    Les certificats suivants seront nommés 02.pem, 03.pem etc.

    Remplacez mail.exemple.com.crt par le nom correspondant à votre nom d'hôte.

  8. Pour finir, copier le nouveau certificat vers son hôte et paramétrez les programmes devant l'utiliser. L'endroit par défaut pour installer les certificats est /etc/ssl/certs. Cela permet à de multiples services d'utiliser le même certificat sans compliquer de trop la gestion des droits d'accès aux fichiers.

    Pour les programmes pouvant être paramétrés pour utiliser un certificat issu d'une AC, vous devriez copier aussi le fichier /etc/ssl/certs/cacert.pem vers le répertoire /etc/ssl/certs/ de chaque serveur.

Références