Table des matières

, , , , , ,

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:

Points notables

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:

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

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.

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