Créer la CA Racine
Mise en place CA Racine sur debian avec OpenSSL
La CA racine ne signe pas directement les certificats des serveurs ou des clients. Elle est uniquement utilisée pour créer une ou plusieurs CA intermédiaires, qui sont de confiance par la AC racine pour signer des certificats en son nom.
C’est la meilleure pratique. Cela permet de garder la clé racine hors ligne et inutilisée autant que possible, car toute compromission de la clé racine serait catastrophique.
Un environnement sécurisé
Il est recommandé de créer la paire racine dans un environnement sécurisé. Cela devrait se faire sur un ordinateur entièrement chiffré et isolé du réseau
Installation de openssl
sudo apt install openssl
Création du répertoire
Je créer un dossier qui regroupera toutes mes clés et certificats:
mkdir CA
Je créer toute la structure:
cd CA
mkdir Racine-CA
cd Racine-CA
certs crl newcerts private
touch index.txt crlnumber
echo 1000 > serial
chmod 700 private
Notre arborescence ressemblera à cela:
CA
└── Racine-CA
├── certs
├── crl
├── crlnumber
├── index.txt
├── newcerts
├── openssl_racine.cnf (à créer juste après)
├── private
├── serial
Pour comprendre
- certs : Contient tous les certificats émis par la CA.
- crl : Pour Certificate Revocation List stocke les listes de révocation de certificats, qui permettent d’invalider des certificats compromis ou expirés.
- index.txt : Fichier de “logs” utilisé par OpenSSL pour enregistrer tous les certificats émis et leur état (valide, révoqué, expiré, etc.)
- newcerts : Contient une copie des certificats émis, identifiés par leur numéro de série.
- private : Stocke la clé privée de la CA. Ce répertoire doit être hautement sécurisé.
- serial: Ce fichier contient le numéro de série du prochain certificat à émettre
Création du fichier de configuration openssl_racine.cnf
[ ca ] # The default CA section
default_ca = ca_default # The default CA name
[ ca_default ] # Default settings for the CA
dir = /home/flo/CA/Racine-CA # CA directory
certs = $dir/certs # Certificates directory
crl_dir = $dir/crl # CRL directory
new_certs_dir = $dir/newcerts # New certificates directory
database = $dir/index.txt # Certificate index file
serial = $dir/serial # Serial number file
RANDFILE = $dir/private/.rand # Random number file
private_key = $dir/private/Racine-CA.key.pem # Root CA private key
certificate = $dir/certs/Racine-CA.cert.pem # Root CA certificate
crl = $dir/crl/Racine-CA.crl.pem # Root CA CRL
crlnumber = $dir/crlnumber # Root CA CRL number
crl_extensions = crl_ext # CRL extensions
default_crl_days = 30 # Default CRL validity days
default_md = sha256 # Default message digest
preserve = no # Preserve existing extensions
email_in_dn = no # Exclude email from the DN
name_opt = CA_default # Formatting options for names
cert_opt = CA_default # Certificate output options
policy = policy_strict # Certificate policy
unique_subject = no # Allow multiple certs with the same DN
[ policy_strict ] # Policy for stricter validation
countryName = match # Must match the issuer's country
stateOrProvinceName = match # Must match the issuer's state
organizationName = match # Must match the issuer's organization
organizationalUnitName = optional # Organizational unit is optional
commonName = supplied # Must provide a common name
emailAddress = optional # Email address is optional
[ req ] # Request settings
default_bits = 4096 # Default key size
distinguished_name = req_distinguished_name # Default DN template
string_mask = utf8only # UTF-8 encoding
default_md = sha512 # Default message digest
prompt = no # Non-interactive mode
[ req_distinguished_name ] # Template for the DN in the CSR
countryName = FR
stateOrProvinceName = France
localityName = France
0.organizationName = Flodocs
organizationalUnitName = Flodocs
commonName = Flodocs Racine CA
emailAddress = test@test.fr
[ v3_ca ] # Root CA certificate extensions
subjectKeyIdentifier = hash # Subject key identifier
authorityKeyIdentifier = keyid:always,issuer # Authority key identifier
basicConstraints = critical, CA:true # Basic constraints for a CA
keyUsage = critical, keyCertSign, cRLSign # Key usage for a CA
[ crl_ext ] # CRL extensions
authorityKeyIdentifier = keyid:always,issuer # Authority key identifier
[ v3_intermediaire_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
Génération de la clé privée RSA Racine
openssl genrsa -aes256 -out ~/CA/Racine-CA/private/Racine-CA.key.pem 4096
Enter PEM pass phrase: mdp
Verifying - Enter PEM pass phrase: mdp
chmod 400 ~/CA/Racine-CA/private/Racine-CA.key.pem
Génération du certificat Racine
Attribuez une durée d’expiration longue au certificat racine, une fois qu’il expire, tous les certificats signés par cette autorité de certification seront expirés.
openssl req -new -x509 -days 3650 -config /home/flo/CA/Racine-CA/openssl_racine.cnf -extensions v3_ca -key /home/flo/CA/Racine-CA/private/Racine-CA.key.pem -out /home/flo/CA/Racine-CA/certs/Racine-CA.cert.pem
Vérifier le certificat Racine
openssl x509 -noout -text -in certs/Racine-CA.cert.pem
La sortie indique :
L’algorithme de signature utilisé Les dates de validité du certificat La longueur en bits de la clé publique L’émetteur, c’est-à-dire l’entité ayant signé le certificat Le sujet, qui désigne le certificat lui-même Puisque le certificat est auto-signé, l’émetteur et le sujet sont identiques. À noter que tous les certificats racine sont auto-signés.
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
0e:65:ca:5a:61:d2:fe:5d:83:f4:32:7c:df:af:87:3e:cc:fd:48:18
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = FR, ST = France, L = France, O = Flodocs, OU = Flodocs, CN = Flodocs Racine CA, emailAddress = test@test.fr
Validity
Not Before: Feb 5 18:53:32 2025 GMT
Not After : Feb 3 18:53:32 2035 GMT
Subject: C = FR, ST = France, L = France, O = Flodocs, OU = Flodocs, CN = Flodocs Racine CA, emailAddress = test@test.fr
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)