Initialisation de la PKI (Root & Intermédiaire) avec CFSSL¶
Cette procédure technique détaille le déploiement d'une infrastructure à clés publiques (PKI) à deux niveaux : une Autorité de Certification (AC) Racine (offline) et une AC Intermédiaire (online).
Cette architecture répond aux exigences de sécurité du groupe Indio en isolant la clé racine.
1. Prérequis et Arborescence¶
L'outil cfssl (Cloudflare SSL Tool) doit être installé sur la machine d'administration.
Créez la structure de dossiers :
mkdir -p pki/{db,root/config,intermediate/config}
cd pki
2. Initialisation de la Base de Données (SQLite)¶
CFSSL utilise une base de données pour stocker l'état des certificats (numéros de série, révocations, OCSP).
A. Création du schéma SQL¶
Créez le fichier db/definition.sql avec le contenu suivant :
CREATE TABLE certificates (
serial_number blob NOT NULL,
authority_key_identifier blob NOT NULL,
ca_label blob,
status blob NOT NULL,
reason int,
expiry timestamp,
revoked_at timestamp,
pem blob NOT NULL,
issued_at timestamp,
not_before timestamp,
metadata text,
sans text,
common_name text,
PRIMARY KEY(serial_number, authority_key_identifier)
);
CREATE TABLE ocsp_responses (
serial_number blob NOT NULL,
authority_key_identifier blob NOT NULL,
body blob NOT NULL,
expiry timestamp,
PRIMARY KEY(serial_number, authority_key_identifier),
FOREIGN KEY(serial_number, authority_key_identifier) REFERENCES certificates(serial_number, authority_key_identifier)
);
B. Initialisation des fichiers DB¶
sqlite3 db/root-certstore.db < db/definition.sql
sqlite3 db/intermediate-certstore.db < db/definition.sql
C. Configuration de l'accès DB¶
Fichier root/config/db.json :
{
"driver": "sqlite3",
"data_source": "db/root-certstore.db"
}
Fichier intermediate/config/db.json :
{
"driver": "sqlite3",
"data_source": "db/intermediate-certstore.db"
}
3. Profils de Signature¶
Les profils définissent les durées de validité et les URLs des points de distribution (CRL/OCSP).
Créez le fichier root/config/profiles.json :
{
"signing": {
"default": {
"crl_url": "http://pki.indio.group/root/crl",
"ocsp_url": "http://pki.indio.group/root/ocsp",
"issuer_urls": ["http://pki.indio.group/root/ca"],
"expiry": "8760h"
},
"profiles": {
"intermediate": {
"usages": [
"signing", "digital signature", "key encipherment",
"cert sign", "crl sign", "server auth", "client auth"
],
"ca_constraint": {
"is_ca": true,
"max_path_len": 0,
"max_path_len_zero": true
},
"expiry": "87600h"
},
"ocsp": {
"usages": ["digital signature", "ocsp signing"],
"expiry": "26280h"
}
}
}
}
🔧 Note Adaptez les URLs (
http://pki.indio.group/...) selon votre domaine réel de déploiement.
4. Génération de la CA Racine (Root)¶
La CA Racine est auto-signée.
A. Fichier de configuration root/config/init.json :¶
{
"CN": "Indio Group Root CA",
"key": { "algo": "rsa", "size": 4096 },
"names": [{ "C": "FR", "ST": "Ile-de-France", "L": "Paris", "O": "Indio Group" }]
}
B. Commande de génération :¶
cfssl genkey -initca root/config/init.json | cfssljson -bare root/ca
5. Génération de la CA Intermédiaire¶
La CA Intermédiaire est signée par la CA Racine.
A. Fichier de configuration intermediate/config/init.json :¶
{
"CN": "Indio Group Intermediate CA",
"key": { "algo": "rsa", "size": 4096 },
"names": [{ "C": "FR", "ST": "Ile-de-France", "L": "Paris", "O": "Indio Group" }]
}
B. Génération de la clé et signature :¶
# Génération de la clé et du CSR
cfssl genkey -initca intermediate/config/init.json | cfssljson -bare intermediate/ca
# Signature du certificat par la Root CA
cfssl sign \
-ca root/ca.pem \
-ca-key root/ca-key.pem \
-config root/config/profiles.json \
-profile intermediate \
-db-config root/config/db.json \
intermediate/ca.csr | cfssljson -bare intermediate/ca
6. Génération des CRL (Listes de Révocation)¶
CFSSL génère la CRL brute sans en-têtes PEM. Il faut les ajouter manuellement.
Pour la CA Racine :¶
echo "-----BEGIN X509 CRL-----" > root/crl.pem
cfssl crl \
-ca root/ca.pem \
-ca-key root/ca-key.pem \
-db-config root/config/db.json | fold -w 64 >> root/crl.pem
echo "-----END X509 CRL-----" >> root/crl.pem
Pour la CA Intermédiaire :¶
echo "-----BEGIN X509 CRL-----" > intermediate/crl.pem
cfssl crl \
-ca intermediate/ca.pem \
-ca-key intermediate/ca-key.pem \
-db-config intermediate/config/db.json | fold -w 64 >> intermediate/crl.pem
echo "-----END X509 CRL-----" >> intermediate/crl.pem
7. Validation et Lancement du Service CFSSL¶
Vérifiez que tout fonctionne en lançant le serveur API CFSSL avec la configuration de l'intermediare:
cfssl serve \
-ca=intermediate/ca.pem \
-ca-key=intermediate/ca-key.pem \
-db-config=intermediate/config/db.json \
-config=intermediate/config/profiles.json
L'API sera accessible sur http://127.0.0.1:8888.