RSS
 

OpenSSL : créer un certificat auto-signé

14 Sep

OpenSSL est une boite à outils open source qui implémente SSL/TLS ainsi qu'une bibliothèque de cryptographie.

Il va nous permettre ici 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.

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.

1 – Installer OpenSSL

 

Pour installer OpenSSL, on se reportera à l'article http://blog.moncoindunet.fr/linux/installer-openssl-sous-linux/

 

2 – 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.

2.1 – Créer la clé privée

La création de la clé privée se fait grâce à la commande genrsa d'OpenSSL avec de quelques options :

  • genrsa : génération d'une clé avec l'algorithme RSA
  • (facultatif) -des3 : indique la création d'une clé avec mot de passe (pass phrase)
  • -rand : réservoir de données aléatoires
  • -out : fichier de sortie
  • 1024 : taille de la clé, en bits

Par exemple :

$ openssl genrsa -des3 -out example.com.key 1024
Generating RSA private key, 1024 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 le répertoire /usr/local/ssl/private/ 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

2.2 – 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.

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

La pass phrase demandée correspond au mot de passe fourni lors de la création de la clé privée.

Par exemple :

$ 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

2.3 – 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 : validité du certficat, en jours
  • -in : fichier contenant la demande de certification
  • -signkey : auto-signature
  • -out : nom du certificat de sortie

La pass phrase demandée correspond au mot de passe fourni lors de la création de la clé privée.

Par exemple :

$ openssl x509 -req -days 1 -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 est à copier dans le répertoire /usr/local/ssl/certs/ pour une utilisation ultérieure.

$ cp example.com.cert /usr/local/ssl/certs/

On va également supprimer les fichiers produits pendant les différentes étapes :

$ rm example.com.key
$ rm example.com.csr
$ rm example.com.cert

On dispose maintenant d'un certificat auto-signé qui peut être utilisé avec divers services, comme Apache par exemple pour sécuriser un site Web (note sur la configuration SSL Apache à venir …).

 
8 Comments

Posted in Linux, OpenSSL

 

Tags: , , ,

Leave a Reply

 

 
  1. Not me

    30 septembre 2010 at 9 h 46 min

    Encore un super article, merci :)

     
  2. Olivernight

    1 juin 2012 at 8 h 44 min

    Merci pour les explications ! Bon tuto

     
  3. ENSIT

    26 avril 2013 at 2 h 00 min

    Trés bon tutorial ,mercii ça m’a ordonné les idées :)

     
  4. postfix | Blog de Karchnu

    29 juin 2013 at 0 h 57 min

    […] à cet article pour apprendre à gérer les […]

     
  5. kiki

    1 mars 2014 at 1 h 58 min

    Merci pour l’aide précieuse.

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

     
    • kiki

      1 mars 2014 at 2 h 17 min

      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