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:
/usr/lib/ssl/openssl.cnf
sauf si l'option -config est utilisée.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é.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
. 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.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.commonName
lors de la génération de la CSR.On peut créer un fichier de configuration a cet effet
# 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
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:
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
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.
Common Name
.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.
# 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