OpenSSL
Comment insérer des attributs du Distinguished Name en ligne de commande dans un certificat SSL ?
Prérequis : notions de base en shell.
Je souhaite créer un certificat SSL en y insérant des informations sur ma société, de façon à pouvoir automatiser le processus de création. Il ne faut donc pas que openssl s'arrête en cours de traitement pour me poser des questions. Je vais donc tout d'abord créer une clef SSL, en m'arrêtant avant la génération de la CSR.
Contexte
Voici les informations que j'aimerais intégrer à la CSR :
- Nom de l'entreprise : Entreprise
- Pays de résidence : Canada
- Région/Etat : Quebec
- Ville : Montreal
- Département/Service : Service Informatique
- Nom de domaine : mondomaine.ca
- Email de contact : contact_cert@mondomaine.ca
Ma clef SSL se situe dans le fichier Entreprise_Serveur.key.
Je cherche à obtenir une CSR dans le fichier Entreprise_Serveur.csr.
Il existe trois méthodes pour ajouter ces informations à la CSR.
1) Par le prompt
C'est la méthode la plus simple. Je tape simplement la commande suivante :
openssl req -new -key Entreprise_Serveur.key \
-out Entreprise_Serveur.csr
Le prompt me demande alors de répondre à différentes questions afin de remplir les champs suivants :
- C (Country) = le pays de résidence de l'entreprise ;
- ST (State) = l'état, la région ou la subdivision administrative de l'entreprise ;
- L (Locality) = la commune de votre entreprise ;
- O (Organization Name) = la raison sociale de votre entreprise ;
- OU (Organization Unit Name) = le service, le département, la filiale utilisatrice du certificat ;
- CN (Common Name) = le FQDN associé à ce certificat ;
- emailAddress (email de contact) = l'email à contacter au sujet de ce certificat.
Inconvénient majeur : impossible d'automatiser le processus !
2) Dans la ligne de commande
Cette méthode consiste à remplacer les questions du prompt par l'ajout de l'option -subj à la commande :
openssl req -new -key Entreprise_Serveur.key \
-out Entreprise_Serveur.csr \
-subj "/C=CA/ST=Quebec/L=Montreal/O=Entreprise/OU=Service Informatique/CN=*.mondomaine.ca/emailAddress=contact_cert@mondomaine.ca"
À noter :
- les attributs s'écrivent dans n'importe quel ordre. Il faut seulement penser à les séparer par une barre oblique "/", et ne pas oublier la première (ici juste avant C=CA) ;
- cette liste d'attributs (sans l'email) constitue le DN (Distinguished Name) ;
- j'ai décidé de relier le certificat au CN *.mondomaine.ca au lieu de mondomaine.ca. Il s'agit d'une bonne pratique pour plusieurs raisons: par exemple, je peux vouloir créer un sous-domaine abc.mondomaine.com, lequel sera couvert par mon certificat.
3) Dans un fichier de configuration
Ici, il est question de créer un fichier de configuration dans lequel seront écrites les informations du DN :
nano -c conf_Entreprise.cnf
J'y insère alors ce contenu :
[ req ]
prompt = no
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
C = CA
ST = Quebec
L = Montreal
O = Entreprise
OU = Service Informatique
CN = *.mondomaine.ca
emailAddress = contact_cert@mondomaine.ca
Puis je lance la création de la CSR :
openssl req -config conf_Entreprise.cnf \
-new -key Entreprise_Serveur.key \
-out Entreprise_Serveur.csr
Je peux vérifier que les informations de la CSR sont bien celles que j'ai mentionnées dans le fichier de configuration, en lisant le contenu en clair de la CSR.