Générer une clef privée et un certificat auto-signé

La technique indiquée ici permet de générer une clé privée au format RSA 1024 bits associée à un certificat x509 auto-signé. On ajoute des extensions x509 pour permettre au certificat de couvrir plusieurs noms pour une seule machine (une seule adresse IP). Cela est particulièrement utile pour des serveurs web configurés en VirtualHost sur une seule adresse IP (on a un seul certificat qui couvre tous les noms).

Note : une fois le certificat généré, il est impossible de lui ajouter un nom...

  1. Copier le modèle de configuration d'OpenSSL ci-dessous, en l'appelant openssl.cnf

  2. Adapter les lignes "subjectAltName" et "nsComment" au niveau de la section [ usr_cert ]
  3. Lancer la commande ci-dessous et répondre au questions posées :
    • $ openssl req -nodes -new -x509 -out server.crt -text -config ./openssl.cnf  -extensions usr_cert -days 1826
  4. Deux fichiers sont produits :
    • server.key contient la clé privée

    • server.crt le certificat associé (clé publique signée)

  5. Vérifier dans le fichier server.crt (il est au format texte) que les paramètres générés semblent corrects

Notez bien :

#
# FICHIER "openssl.cnf" à copier puis adapter avant utilisation
#
# Il s'agit de la configuration OpenSSL pour générer un certificat pour une machine
# avec PLUSIEURS noms (certificat auto-signé, en attendant une AC racine pour l'AUF)
#
# Mode d'emploi :
# 1) adapter les lignes "subjectAltName" et "nsComment" au niveau de la section [ usr_cert ]
# 2) lancer la commande ci-dessous et répondre au questions posées :
#        $ openssl req -nodes -new -x509 -out server.crt -text -config ./openssl.cnf  -extensions usr_cert -days 1826
# 3) Deux fichiers sont produits : 
#       * "server.key" contient la clé privée
#       * "server.crt" le certificat associé (clé publique signée)
#    Vérifier dans le fichier server.crt (il est au format texte) que les paramètres générés semblent corrects
#
# Notez bien :
#  * la clé privée n'est pas chiffrée, elle est "en clair", sans mot de passe afin que les serveurs
#    qui auront à l'utiliser puisse le faire directement. Il faut donc lui donner des accès minimums
#    (lecture seule par root, en général)
#    Si vous devez crypter la clé : "man rsa" 
#  * le certificat est auto-signé, il provoquera donc l'affichage d'un message d'alerte sur la plupart
#    des navigateurs, voire nécessitera de gérer une "exception de sécurité" sur Firefox 3 et assimilés.
#

[ usr_cert ]
subjectAltName                  = DNS:www.auf.org, DNS:wiki.auf.org, DNS:courriel.auf.org, DNS:courrier.auf.org
nsComment                       = "Certificat pour www.pays.auf.org et sites freres"
nsCertType                      = server
basicConstraints                = CA:FALSE
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer

[ req ]
default_bits                    = 1024
default_keyfile                 = server.key
distinguished_name              = req_distinguished_name
string_mask                     = nombstr

[ v3_req ]
keyUsage                        = nonRepudiation, digitalSignature, keyEncipherment

[ req_distinguished_name ]
countryName                     = Code pays, sur 2 lettres
countryName_default             = SN
countryName_min                 = 2
countryName_max                 = 2
stateOrProvinceName             = Région ou province
stateOrProvinceName_default     = Dakar
localityName                    = Ville
localityName_default            = Dakar
0.organizationName              = Nom de l'organisation
0.organizationName_default      = AUF
organizationalUnitName          = Unité ou service dans l'organisation
organizationalUnitName_default  = DRI
0.commonName                    = Nom complet de la machine, avec domaine (FQDN)
0.commonName_default            = www.pays.auf.org
emailAddress                    = Adresse électronique
emailAddress_default            = hostmaster@pays.auf.org
emailAddress_max                = 64

OpenSSL (dernière édition le 2008-12-23 10:09:03 par ThomasNoël)