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