Outils pour utilisateurs

Outils du site


sysadmin:linux:gestion_certificats:creation_des_csr

Options de création de la CSR

C'est via le CLI openssl qu'on va pouvoir générer la Certificate Signing Request abrégée CSR. La création de la CSR est la partie la plus critique de la génération du certificat. Si la CSR n'est pas correcte:

  • La signature par l'Autorité de Certification (CA) peut échouer;
  • L'authentification MTLS peut ne pas fonctionner et retourner une TCP Handshake error;
  • Vous serez contraint de créer de multiples certificats, un pour chaque hôte si vous n'êtes pas familiarisé avec le champ SAN (SubjectAlternateName)
  • Les extensions X.509 ne seront pas correctement ajoutées
  • etc

Points notables

  • openssl consulte par défaut le fichier de configuration /usr/lib/ssl/openssl.cnf sauf si l'option -config est utilisée.
  • Le champ req_distinguished_name liste les attributs à renseigner lors de la génération de la CSR. Cette section peut être modifiée dans le fichier de configuration openssl.cnf avec des valeurs par défaut et des conditions de validité.
  • Il y a différentes stratégies applicables lors de la signature définies dans les sections policy_* du fichier de configuration. La stratégie policy_anything est normalement utilisée pour pour l'émission de certificats auto-signés où tous les champs sont optionnels sauf le commonName.
  • La stratégie policy_match est utilisée pour générer des certificats RootCA. Si vous souhaitez utiliser le certificat de cette Autorité de Certification pour signer des certificats client/serveur, les sections notées match doivent être identiques entre le certificat du RootCA et les certificats clients/serveurs.
  • Le champs commonName est utilisé par les communications MTLS. Le champ commonName doit correspondre à l'HOSTNAME ou au FQDN du serveur sur le certificat serveur ou bien à l'HOSTNAME ou FQDN du client sur le certificat client.
  • Pour permettre la haute disponibilité ou la répartition de charge un seul FQDN peut être associé à plusieurs adresses, dans ce cas on utilisera de préférence les certificats SAN. Dasn ce cas le paramètre -extfile peut être utilisé avec openssl pour fournir la liste des IPs valides. Dasn ce cas on fournit le nom de domaine du serveur au champ commonName lors de la génération de la CSR.

Définir les valeurs par défauts de la CSR

On peut créer un fichier de configuration a cet effet

CSR.cnf
# Fichiers de configuration des demandes de certificats
# Certificate Signing Request (CSR)
 
[ req ]
# définitions des options pour openssl req
default_bits        = 2048
distinguished_name  = distinguished_name
string_mask         = utf8only
 
# SHA-1 is deprecated, so use SHA-2 instead.
default_md          = sha256
 
# Extension to add when the -x509 option is used.
#x509_extensions     = v3_ca
 
[ distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = FR
countryName_min                 = 2
countryName_max                 = 2
 
stateOrProvinceName             = State or Province Name
stateOrProvinceName_default     = France
 
localityName                    = Locality Name
localityName_default            = Haute Garonne
 
0.organizationName              = Organization Name
0.organizationName_default      = Mairie de Tournefeuille
 
organizationalUnitName          = Organizational Unit Name
organizationalUnitName_default  = Labo Informatique
 
emailAddress                    = Email Address
emailAddress_default            = administrateur@mairie-tournefeuille.fr
 
commonName                      = Common Name (user name, hostname or FQDN)
commonName_max                  = 64

Création de la CSR

Pour créer la CSR:

openssl req -new -config CSR.cnf -key private/local.key -sha256 -out csr/local.csr

Un mot sur les options utilisées:

  • L'option req pour qu'openssl génère une CSR;
  • -config pour utiliser le fichier de configuration préparé précédemment;
  • -key la clé privée à utiliser pour signer la requête CSR;
  • -out le fichier d'enregistrement de la CSR;

Création du certificat

Pour créer le certificat, la CSR émise doit être validée/signée par l'Autorité de Certification; Dans notre cas l'autorité de certification intermédiaire telle que définie dans le wiki

Deux options openssl permettent la création d'un certificat

  • openssl ca: contrôle la validité des champs en fonction de la stratégie utilisée. Base de suivi des certificats émis
  • openssl x509: pas de vérification, pas de suivi

Dans l'exemple ci dessous la CSR émise contient volontairement un Country Name différent. La politique du CA intermédiaire est définie pour refuser les requêtes dont le champ Country Name n'est pas identique:

openssl ca -config openssl.cnf -extensions server_cert \
  -days 365 -notext -md sha256 \
  -in csr/local.csr -out certs/local.cert.pem

La commande retourne:

Using configuration from openssl.cnf
Enter pass phrase for /home/yoann/.private/intermediate_ca/private/intermediate_ca.key:
Check that the request matches the signature
Signature ok
The countryName field is different between
CA certificate (FR) and the request (BE)

Si on utilise l'option x509, la création du certificat aboutie

openssl x509 -req -days 90 -in csr/local.csr -CA certs/intermediate_ca.cert.pem -CAkey private/intermediate_ca.key -CAcreateserial -out certs_x509/local.crt

On peut vérifier le contenu du certificat via la commande:

openssl x509 -noout -text -in certs_x509/local.crt

Le certificat SAN

Un certificat SAN (abrégeant Subject Alternative Name) peut être utilisé sur de multiples noms de domaines par exemple abc.com ou xyz.com où les noms de domaines sont complètement différents mais pourront utiliser ce même certificat.

  • De multiples noms peuvent être associés au certificat
  • On définit une liste dadresse IP ou ed noms de domaines qui pourront être utilisés en lieu et place du champ Common Name.
On parle parfois de certificat wilcard

Avant de pouvoir créer des certificats SAN il est nécessaire d'ajouter certaines valeurs à la configuration des listes d'extensions x509 d'openssl.

CSR_SAN.cnf
# Fichiers de configuration des demandes de certificats
# Certificate Signing Request (CSR)
 
[ req ]
# définitions des options de  l'argument openssl req
default_bits        = 2048
distinguished_name  = distinguished_name
string_mask         = utf8only
 
# SHA-1 is deprecated, so use SHA-2 instead.
default_md          = sha256
 
req_extensions      = req_ext_san
# Extension to add when the -x509 option is used.
#x509_extensions     = v3_ca
 
[ distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = FR
countryName_min                 = 2
countryName_max                 = 2
 
stateOrProvinceName             = State or Province Name
stateOrProvinceName_default     = France
 
localityName                    = Locality Name
localityName_default            = Haute Garonne
 
0.organizationName              = Organization Name
0.organizationName_default      = Mairie de Tournefeuille
 
organizationalUnitName          = Organizational Unit Name
organizationalUnitName_default  = Labo Informatique
 
emailAddress                    = Email Address
emailAddress_default            = administrateur@mairie-tournefeuille.fr
 
commonName                      = Common Name (user name, hostname or FQDN)
commonName_max                  = 64
 
 
[ req_ext_san ]
subjectAltName = @alt_names
 
[alt_names]
IP.1 = 127.0.0.1
DNS.1 = fbaea6818592
DNS.2 = localhost
DNS.3 = node-7c87

La commande de signature du CSR avec SAN diffère, on spécifie le fichier avec les extensions à intégrer:

openssl x509 -req -days 90 -in csr/local.csr -CA certs/intermediate_ca.cert.pem -CAkey private/intermediate_ca.key -CAcreateserial -extfile server_san_ext.cnf -out certs_x509/local.crt

Références

sysadmin/linux/gestion_certificats/creation_des_csr.txt · Dernière modification : 2021/10/27 23:17 de yoann