OpenSSL est une boite à outils open source qui implémente SSL/TLS ainsi qu’une bibliothèque de cryptographie.
Il va nous permettre dans cet article de générer un certificat auto-signé. Ce type de certificat est très utile dans un cadre d’utilisation personnelle, par exemple pour implémenter les variantes sécurisées des protocoles tels que HTTP, IMAP ou SMTP qui deviendront alors HTTPs, IMAPs et SMTPs.
Article écrit avec OpenSSL en version 1.0.1e.
Article mis à jour le 12/10/2016
Installer OpenSSL
Pour installer OpenSSL, on se reportera à l’article installer OpenSSL sous Linux.
Pour savoir si OpenSSL est déjà présent sur la machine, on peut regarder la version :
[code lang=bash]
# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
[/code]
Si la version s’affiche, alors OpenSSL est déjà installé.
Créer le certificat
La création du certificat se déroule en trois étapes :
- création de la clé privée
- création d’une requête de certification
- auto-signature
Dans le cas où le certificat sera certifié par une CA (autorité de certification) la procédure est la même, sauf que la requête de certification sera envoyée au CA au lieu de faire l’auto-signature.
Créer la clé privée
La création de la clé privée se fait grâce à la commande genrsa
d’OpenSSL à l’aide de quelques options :
genrsa
: génération d’une clé avec l’algorithme RSA- (facultatif)
-des3
: permet de chiffrer la clé privée avec un algorithme des3 qui nécessitera la création d’un mot de passe ou passphrase -out
: fichier de sortie4096
: taille de la clé, en bits
Par exemple, la création d’une clée privée de 4096 bits avec un mot de passe :
[code lang=text]
# openssl genrsa -des3 -out example.com.key 4096
Generating RSA private key, 4096 bit long modulus
………………………………………………………………………………………………………………………………………………………………………………….++
……………………………..++
e is 65537 (0x10001)
Enter pass phrase for example.com.key:
Verifying – Enter pass phrase for example.com.key:
[/code]
Le fichier de sortie example.com.key
est à copier dans un répertoire protégé pour une utilisation ultérieure. Cette clé doit rester secrète, il faut donc aussi réduire les droits sur ce fichier (lecture uniquement pour le propriétaire) :
[code lang=text]
# cp example.com.key /usr/local/ssl/private/
# chmod 400 /usr/local/ssl/private/example.com.key
[/code]
Comme indiqué dans un commentaire, vous serez parfois obligé de supprimer la passphrase associée à une clé pour pouvoir l’utiliser dans un applicatif donné tel que Apache HTTP ou Nginx. La passphrase peut être supprimée avec cete commande :
openssl rsa -in example.com.key -out example.com.key
Vous voulez savoir si votre clé privée est chiffrée ? Regardez les premières lignes du fichier généré :
head example.com.key
. Si la clé est chiffrée vous aurez alors une ligne du typeProc-Type: 4,ENCRYPTED
suivi d’une ligne indiquant l’algorithme utilisé.
Créer la requête de certification
La création de la requête de certification se fait grâce à la commande req
d’OpenSSL avec un certain nombre d’options :
req
: gestion des requêtes de certification-new
: nouvelle demande-key
: clé privée à utiliser-out
: fichier de sortie
La création d’une nouvelle demande de certification implique le renseignement d’un certain nombre d’informations sur le demandeur, sachant qu’ils ne sont pas forcément obligatoires (par exemple, Organizational Unit Name
). Si vous ne voulez pas remplir un champ, mettre un espace.
Important : l’information
Common Name
doit correspondre à l’URL que tapera l’utilisateur, si le certificat est destiné à un usage Web ou au nom complet du serveur si autre utilisation (par exemple,imap.example.com
pour un serveur IMAP)
La passphrase demandée correspond au mot de passe fourni lors de la création de la clé privée.
Par exemple, la création d’une requête de certification :
[code lang=text]
# openssl req -new -key example.com.key -out example.com.csr
Enter pass phrase for example.com.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
—–
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:Paris
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:www.example.com
Email Address []:admin@example.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[/code]
Cette commande produit le fichier example.com.csr
qui peut être utilisé dans deux cas :
- utilisé pour l’auto-signature
- envoyé à une autorité de certification tierce
Auto-signer le certificat
La création du certificat auto-signé se fait grâce à la commande x509
d’OpenSSL avec un certain nombre d’options :
x509
: gestion des certificats-req
: pour passer un certificat-days
: durée de validité du certficat, en jours-in
: fichier contenant la demande de certification-signkey
: auto-signature-out
: nom du certificat de sortie
La passphrase demandée correspond au mot de passe fourni lors de la création de la clé privée.
Par exemple, une auto-signature d’un certificat valide 1 an :
[code lang=text]
# openssl x509 -req -days 365 -in example.com.csr -signkey example.com.key -out example.com.cert
Signature ok
subject=/C=FR/ST= /L=Paris/O= /OU= /CN=www.example.com/emailAddress=admin@example.com
Getting Private key
Enter pass phrase for example.com.key:
[/code]
Le fichier de sortie example.com.cert
peut être copier dans un répertoire pour une utilisation ultérieure (par exemple, le répertoire de l’application qui en aura besoin).
Utiliser le certificat
On dispose désormais d’un certificat auto-signé qui peut être utilisé avec divers services comme Apache HTTP, Nginx ou Dovecot par exemple pour sécuriser les différents accès. Ces services ont généralement besoin des deux fichiers :
- celui désigné comme étant la “clé privée” : dans notre cas, le fichier
example.com.key
- celui désigné comme étant le “certificat” : dans notre cas, le fichier
example.com.cert
Le fichier example.com.csr
correspondant, à la requête de certification est un fichier intermédiaire qui n’est pas utilisé par les services. Il peut néanmoins être conservé pour effectuer une nouvelle auto-signature, à l’expiration du certificat par exemple.
A noter : lors de l’utilisation sur un site Web, le navigateur affichera un message d’avertissement sur la connexion en HTTPS. Ceci est du au fait que, comme son nom l’indique, le certificat utilisé est auto-signé, c’est à dire non certifié par une autorité de confiance telle que Verisign par exemple. C’est pour cela qu’il n’est pas conseillé d’utiliser un certificat auto-signé pour un site publique par exemple, mais plutôt dans un cadre restreint.
Leave a Reply