Certificats OpenSSL

De FrozenWiki

Format de fichiers

Définitions

PEM 
Ce fichier peut contenir des clés privées et publiques (RSA et DSA) ainsi que des certificats (x509). C'est le format de fichier par défaut pour OpenSSL. Les données sont stockées au format DER encodé en Base64, entourées de balises au format ASCII.
DER 
Ce fichier peut contenir des clés privés et publiques (RSA et DSA) ainsi que des certificats (x509). Les données sont stockées au format ASN1 DER, sans être entouré de balises ASCII. Ce format est le format par défaut pour la plupart des navigateurs web. NOTE: Le fichier PEM est un fichier DER encodé en ASCII, entouré des balises de marquage.
PKCS#12 
Egalement appelé fichier PFX. Ce fichier peut contenir des clés privées et publiques (RSA et DSA) ainsi que des certificats. Les données sont stockées dans un format binaire.

Conversion de format

Les commandes openssl permettent de convertir les fichiers d'un format à un autre. Exemples:

openssl pkcs12 -export -in fichier.PEM -out fichier.PKCS12 
openssl pkcs12 -in fichier.PKCS12 -out fichier.PEM
openssl dsa -inform PEM -outform DER -in fichier.PEM -out fichier.DER
openssl rsa -inform DER -outform PEM -in fichier.DER -out fichier.PEM
openssl x509 < fichier.PEM -outform DER > fichier.DER

Plusieurs certificats dans un seul fichier

Il est possible de stocker plusieurs certificats dans un seul fichier. La plupart du temps OpenSSL n'utilisera que le premier certificat trouvé dans un fichier, il faut donc vérifier que chaque fichier ne contient qu'un seul certificat. Cela peut se vérifier en inspectant les balises entourant chaque certificat si le fichier est au format PEM.

Le seul cas où vous pourriez souhaiter inclure plusieurs certificats dans un seul fichier, c'est lorsqu'il est nécessaire de créer une liste de tous les certificats, ou toutes les Certificate Authority auxquels vous faites confiance.

Creation de la Certificate Authority

Configuration du système

Avant toute chose, il faut configurer OpenSSL. C'est dans ce fichier que sont précisés le dossier principal de stockage des certificats, le nom du certificat maître et de sa clé privée, les valeurs par défaut des nouveau certificats qui seront créés ultérieurement.

/etc/ssl/openssl.cnf

Création de l'espace de stockage

Il est recommandé de configurer un espace de stockage dédié à la Certificate Authority dans le système de fichiers. Si OpenSSL utilise le chemin /etc/ssl pour ses données, vous pouvez créer un point de stockage /etc/ssl/CA-root pour toutes les données relatives au certificats.

Voici la structure de répertoire recommandée:

/etc
 |_ ssl
    |_ CA-root
       |_ certs
       |_ crl
       |_ keys
       |_ newcerts
       |_ private

Configurer les fichiers initiaux:

echo 01 > serial
touch index.txt

Création du certificat maître

Dans cette phase, la création du certificat maître est effectuée. Ce certificat doit être distribué très largement pour permettre aux certificats signés par la CA d'être reconnus comme valides. La clé privée de ce certificat doit être très protégée, car c'est sur elle que repose la sécurité de toute la PKI.

openssl req -new -x509 -days 3650 -keyout ca-cert.key -out ca-cert.crt
chmod 600 ca-cert.key
mv ca-cert.key /<path to CA>/private
mv ca-cert.crt /<path to CA>/certs

Distribution du certificat maître

Afin de permettre à tous les clients de pouvoir reconnaître les certificats signés par la Certificate Authority, il faut installer le certificat maître dans tous ces clients. La distribution du certificat peut se faire de différentes manières.

ATTENTION: Seul le certificat doit être envoyé. Le fichier de clé privée doit rester secret et protégé en toutes circonstances.

  1. distribution du fichier certificat par mail ou FTP : il suffit de transmettre le fichier au format PEM et de l'installer dans les applications. Certaines applications n'acceptent le certificat qu'au format DER. Dans ce cas il faut le convertir avant de l'envoyer.
  2. un lien sur un site web : dans ce cas, il faut s'assurer que le serveur web apache contient une définition de type de fichier correcte dans sa configuration (AddType application/x-x509-ca-cert .crt .cert)

Creation de Certificat

Etape 1 - Génération de la demande de certificat

Il faut tout d'abord générer une demande de certificat. La clé privée est générée dans la même étape, et sera stockée dans le fichier .key qu'il faut protéger de manière adéquate.

NOTE: Le champ Organisation (O=) doit être la même dans la demande de certificat que dans la configuration de la Certificate Authority.

openssl req -nodes -new -keyout server-cert.key -out server-cert.csr
chmod 600 server-cert.key
mv server-cert.key /<path to CA>/private

L'option -nodes dans la requête crée une clé privée non encryptée, non protégée par mot de passe. Dans la plupart des cas, vous devriez supprimer cette option pour protéger vos clés privées.

Etape 2 - Signature du certificat

Ensuite, il faut demander à la Certificate Authority de signer la demande de certificat générée à l'étape 1. Après la signature, le fichier .crt sera disponible et peut être utilisé comme certificat de serveur.

openssl ca -out server-cert.pem -in server-cert.csr

Etape 3 - Organisation des fichiers

Tous les fichiers de demande de certificats (CSR) peuvent être supprimés puisqu'ils ne sont utilisés que de manière temporaire jusqu'à ce que le certificat final soit délivré.

Si vous souhaitez stocker sur le serveur les certificats générés, ils devront être placés dans le sous-dossier certs dans /etc/ssl. Normalement chaque certificat stocké dans ce dossier doit être nommé suivant sa somme de hachage (par exemple f73e89fd.0). Plutôt que de renommer le certificat, il est possible de créer ce nom spécifique via un lien symbolique de la façon suivante (le .0 final est important!):

ln -s cert.pem `openssl x509 -hash -noout -in cert.pem`.0

Révoquer un certificat

Lorsqu'un certificat doit être rendu inutilisable parce que sa clé privée a été compromise, ou alors parce qu'il a expiré et qu'un nouveau certificat doit être généré pour le même utilisateur (même champ DN), il faut alors le révoquer.

Pour révoquer le certificat, chercher dans le fichier index.txt son numéro d'index. Le certificat est alors stocké sur la Certificate Authority dans le fichier correspondant au numéro d'index dans le dossier newcerts. La commande à lancer est alors la suivant, en remplacant 01.pem par le bon numéro.

openssl ca -revoke 01.pem

Vérifier les certificats

Recevoir le certificat d'un serveur SSL

Il est possible de récupérer le certificat d'un serveur SSL (serveur IMAPS, serveur Web, ...) en ligne de commande. Il suffit d'utiliser une commande comme celle qui suit pour afficher le certificat utilisé par le serveur:

openssl s_client -showcerts -connect <serveur>:<port_ssl>

Vérifier les paramètres d'un certificat

Si vous disposez du fichier PEM du certificat, il est possible d'afficher en clair tous ses paramètres. Cette commande s'applique à n'importe quel type de certificat, qu'il s'agisse de celui de la Certificate Authority ou alors de celui d'un serveur ou encore d'un utilisateur.

openssl x509 -text -in server-cert.crt

Obtenir le code d'identification d'un certificat

Pour pouvoir comparer des certificats entre eux, et déterminer s'ils sont identiques, il suffit de comparer leur code d'identification :

openssl x509 -fingerprint -noout -in CA.crt

Vérifier la validité d'un certificat

Une commande OpenSSL permet de vérifier que tous les fichiers sont bien placés, et que la validité du certificat rend possible son utilisation:

openssl verify -issuer_checks server-cert.pem
openssl verify -CApath /etc/ssl/certs server-cert.pem

Liens utiles