Mise en place d’une CA

Un petit guide rapide en forme d’aide-mémoire pour mettre en place une CA (Autorité de Certification) ou PKI (Private Key Infrastructure)

Configurer /etc/ssl/openssl.cnf

Le fichier /etc/ssl/openssl.cnf contient les valeurs par défaut utilisées par la commande openssl. Les définir permet de gagner du temps dans la création des certificats.

La zone [ CA_default ]

On définit le dossier qui contiendra les fichiers relatifs à la CA “par défaut” (la seule qu’on utilisera ici).

[ CA_default ]
dir             = ./maCA        # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = $dir/root-ca.crt      # The CA certificate
serial          = $dir/serial           # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/root-ca.key      # The private key
RANDFILE        = $dir/.rand    # private random number file

La zone [ req_distinguished_name ]

Je n’indique que les lignes à modifier (et un peu de contexte) :

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = FR

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Mon departement

localityName                    = Locality Name (eg, city)
localityName_default            = Ma ville

0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = Mon entreprise

Créer les dossiers et fichiers indiqués

Créer le dossier contenant la CA :

mkdir /etc/ssl/maCA

Puis créer les sous-dossiers qui contiendront les certificats générés, tels qu’indiqués dans le fichier de configuration :

mkdir /etc/ssl/maCA/certs
mkdir /etc/ssl/maCA/crl
mkdir /etc/ssl/maCA/newcerts

Créer le (premier) numéro de série :

echo "01" > /etc/ssl/maCA/serial

Créer le fichier d’index :

touch /etc/ssl/maCA/index.txt

Créer le fichier .rand : attention, choisissez un nombre entre 10 et 99, n’importe lequel mais ne laissez pas 74.

echo "74" > /etc/ssl/maCA/.rand

Créer la CA root key et le certificat auto-signé

Il faut se placer dans le dossier /etc/ssl

cd /etc/ssl

On crée la paire de clés :

openssl genrsa -des3 -out root-ca.key 2048

Et on la signe :

openssl req -new -x509 -days 3650 -key root-ca.key -out root-ca.crt

Il faut indiquer comme Common Name : ROOT CA et laisser vide le champ Email Address.

La ligne signifie “Créer un nouveau certificat X.509 auto-signé valide pour 10 ans pour la paire de clé contenue dans root-ca.key et l’enregistrer dans root-ca.crt “.

Pour examiner le contenu de ce certificat, entrer :

openssl x509 -noout -text -in root-ca.crt

Ensuite, il faut ranger ces 2 fichiers là où notre fichier de config pourra les retrouver :

mv root-ca.* maCA

maCA est le répertoire qu’on a défini dans la configuration de openssl.cnf.

Créer des certificats et les signer avec notre root CA

La création de certificats se passe en 2 temps :

  • créer une Certificate Signing Request (demande de signature de certificat) => générer un fichier .CSR
  • signer la CSR pour générer le certificat .CRT

En général, la CSR (et la clé privée, le .key) est créée par l’utilisateur qui l’envoie à la personne chargée de délivrer les certificats.

Créer la CSR

Le nom du fichier est totalement libre. Indiquer le nom de l’utilisateur dans le champ Common Name et son adresse email dans Email Address. Indiquez une passphrase pour la clé privée (le .key). Vous pouvez laisser vide le challenge password.

openssl req -newkey rsa:2048 -keyout jissouille.key -out jissouille.csr

Le mot de passe n’est connu que de l’utilisateur (pas de la personne qui délivre le certificat).

Signer la demande et générer le certificat

openssl ca -out jissouille.crt -infiles jissouille.csr

Le mot de passe demandé est celui de la CA bien sûr.

Après validation, le fichier jissouille.crt (le certificat) est à remettre à l’utilisateur. Une copie se trouve dans /etc/ssl/maCA/newcerts.

Générer un certificat sans passphrase

openssl req -new -text -out usernopp.csr

Donner une passphrase quelconque d’au moins 4 caractères, par exemple “abcd”.

Puis retirer la passphrase :

openssl rsa -in privkey.pem -out usernopp.key
rm privkey.pem

Indiquer la passphrase précédemment entrée puis (auto-)signer la clé avec notre CA :

openssl ca -out usernopp.crt -infiles usernopp.csr

Re-générer un certificat

Soit parce-qu’il a expiré soit parce-que le précédent a été révoqué pour une raison quelconque, vous allez vouloir générer un nouveau certificat.

En fait, si le précédent a expiré, vous ne pourrez pas en regénérer un directement :

Sign the certificate? [y/n]:y
failed to update database
TXT_DB error number 2

La façon propre de gérer ça consiste à d’abord révoquer le certificat expiré (voir un peu plus bas). L’autre méthode (sale) est de supprimer l’entrée dans la “base de données” : maCA/index.txt

Une fois que vous avez révoqué le précédent certificat, vous regénérez le nouveau ainsi :

openssl ca -out toto.crt -infiles toto.csr

Vous remarquez que si les données n’ont pas changé (l’adresse email notamment), vous pouvez très bien réutiliser la même CSR.

Révoquer un certificat

Si vous avez gardé une copie du certificat :

openssl ca -revoke toto.crt

Sinon, par défaut, openssl conserve une copie des certificats dans /etc/ssl/maCA/newcerts. Cherchez dans /etc/ssl/maCA/index.txt le numéro de série qui correspond au certificat et révoquez-le avec la copie de secours :

openssl ca -revoke /etc/ssl/maCA/newcerts/1013.pem

Liens utiles

Quelques commandes bien utiles pour convertir, vérifier et bidouiller des clés et des certificats ici

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *