OpenSSL : créer un certificat auto-signé

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 :

# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

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 :

  1. création de la clé privée
  2. création d’une requête de certification
  3. 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 sortie
  • 4096 : 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 :

# 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:

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) :

# cp example.com.key /usr/local/ssl/private/
# chmod 400 /usr/local/ssl/private/example.com.key

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 type Proc-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 :

# 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 []:

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 :

# 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:

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.

8 pensées sur “OpenSSL : créer un certificat auto-signé”

  1. Merci pour l’aide précieuse.

    Tuto très clair avec les explications qui vont bien.
    On arrive à nos fins rapidement tout en apprenant.

    1. Finalement ça ne fonctionnait pas, erreur au redemarrage de nginx.
      Sauvé avec ça :

      openssl genrsa -out subdomain.domain.tld.key 1024
      openssl req -new -x509 -days 365 -key subdomain.domain.tld.key -out subdomain.domain.tld.combined.crt

Laisser un commentaire