La gestion de certificats en entreprise avec l'ADCS et openssl
Pour un besoin pro, j’ai eu à apprendre le fonctionnement des certificats en entreprise, j’ai décidé d’apprendre le fonctionnement des certificats en utilisans le role ADCS de Windows Server (surement le plus utilisé).
Les 2 types de générations de certificats
On peux dissocier les certificats en 2 catégories:
Les certificats auto signés
Ce type de certificat est plus simple à générer, sur Windows avec IIS la console IIS permet de générer des certificats auto signés, sous openssl nous pouvons utiliser la commande suivante:
Ici les chemins peuvent être changé, il en va de même pour le type de chiffrement de la clé, rsa est déprécrié et 2048bits est aujourd’hui trop peu (mais l’augmenter augmente le temps de génération de la clé)
Voici le schéma suivi pour l’autosignature de fichier:
Le problème de ce fonctionne est que les clients externes à la machine qui n’ont pas le certificat d’installés verrons un messgae indiquant que le certificat n’est pas valide car il n’a pas été signé par une vraie autorité de certification, pour éviter ce problème, il faut utiliser l’autre méthode de génération de certificat.
Les certificats générés par une autorité de certification
Dans cette méthode, le système de génération est globalement le même à la différence que le certificat sera validé par une autorité de certificat qui permettra la validation et la diffusion du certificat pour d’autres utilisateurs.
Voici dans les grandes lignes le fonctionnement de ce système (j’ai volontairement simplifié des étapes):
Sur le schéma précedent, le certificat est généré sur la machine cible mais il peux être généré sur un autre ordinateur, la seule condition est de garder le fichier .key qui est la clé privée et qui pourra reservir en cas de besoin de regénérer de renouveler le certificat.
Je détails cette méthode en dessous
Les formats de fichier de certificat
key : Fichier qui contient la clé privée du certificat, commence par -----BEGIN ENCRYPTED PRIVATE KEY-----
csr : Contient une demande de création d’un certificat, commence par -----BEGIN CERTIFICATE REQUEST-----
pem,crt, cer, cert : Contient un certificat, ces fichiers commencent par ---- BEGIN CERTIFICATE----
pfx : Contient un certificat qui utilise la norme PKCS#12, il contient une clé privée ainsi qu’une clé publique
Générer une demande
Pour des raisons pratique, je n’explique que la démarche avec openssl mais la création de clé est possible avec Windows
Avec openssl il faut utiliser la commande suivante pour générer une clé privée ET un fichier csr qui sera à envoyer à l’authorité de certification:
Pour retirer l’obligation d’ajouter une passphrase, il faut ajouter l’argument -nodes
Récupérer le fichier csr généré sur l’autorité de certificat (ou sur un autre poste qui possède une console MMC avec le composant Autorité de certification) puis aller sur le nom du serveur -> Toutes les tâches -> Soumettre une nouvelle demande
Dans mon cas, j’ai un message d’erreur m’indiquant que le certificat n’utilise pas de modèle disponible sur l’authorité de certification
Eviter le message d’erreur
La solution est disponible via ce lien. Il faut générer le certificat via l’invite de commande.
Ouvrir une invite de commande en mode administrateur
Pour afficher la liste des templates disponible et leur accès, utiliser la commande: certutil -CATemplates -Config <Nom de la machieb>\<Nom de l'autorité de certification>
Pour générer la réponse du certificat, on va utiliser la commande certreq en indiquant le modèle de certificat que l’on va utiliser: certreq -attrib "CertificateTemplate:WebServer", ensuite il est demander de choisir le fichier, ensuite il sera demande un nom de fichier pour le fichier .crt