Création d’une autorité de certification

Création d’une autorité de certification

Nous allons aborder ici la création d’une petite autorité de certification gérée manuellement en ligne de commande par openssl.

Installation d’openssl :

# aptitude install openssl

Mettre en place une AC

La première chose à faire est de créer une arborescence pour les fichiers de l’authorité de certification, dans le répertoire /etc/ssl :

# mkdir -p /etc/ssl/example.com/{certs,crl,newcerts,private}
# touch /etc/ssl/example.com/index.txt
# echo "01" > /etc/ssl/example.com/serial

Ensuite il faut configurer OpenSSL pour qu’il reconnaisse cette arborescence comme celle d’une AC. Ce fichier de configuration est /etc/ssl/openssl.cnf

Le fichier de configuration est divisé en sections, qui commencent par :

[ nom_de_la_section ]

Une AC est définie dans une section, le nom de l’AC dans le contexte d’OpenSSL est défini par le nom de cette section. La section particulière [ ca ] permet de définir l’AC par défault.

Le fichier de configuration contient un exemple ([ CA_default ]) qu’on va utiliser comme base pour l’exemple :

[ ca ]

default_ca      = example_com           # The default ca section

[ example_com ]

dir             = /etc/ssl/example.com  # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = $dir/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
#crlnumber      = $dir/crlnumber        # the current crl number must be
                                        # commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem# The private key
RANDFILE        = $dir/private/.rand    # private random number file

x509_extensions = usr_cert              # The extentions to add to the cert

# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt        = ca_default            # Subject Name options
cert_opt        = ca_default            # Certificate field options

# Extension copying option: use with caution.
# copy_extensions = copy

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions        = crl_ext

default_days    = 365                   # how long to certify for
default_crl_days= 30                    # how long before next CRL
default_md      = sha1                   # which md to use.
preserve        = no                    # keep passed DN ordering

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy          = policy_match

Les directives default_days (durée de vie des certificats émis par l’AC) et default_crl_days (durée de vie d’une CRL) peuvent être modifiées pour vos besoins. La section [ req_distinguished_name ] peut également être modifiée pour configurer les paramètres par défaut pour la création de certificats :

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = LU
countryName_min                 = 2
countryName_max                 = 2                           

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Luxembourg                        

localityName                    = Locality Name (eg, city)
localityName_default            = Luxembourg                      

0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = AJM

On crée le couple clef privée/publique pour l’AC AJM :

# cd /etc/ssl/example.com
# openssl req -x509 -newkey rsa:2048 -days 3650 -keyout private/cakey.pem -out cacert.pem

cakey.pem est la clef privée.

cacert.pem est la clef publique.

Pour assurer la sécurité de la clé privée de l’AC, on restreint les permissions sur le répertoire private,

# chmod -R 600 /etc/ssl/example.com/private

Création d’un couple clef privée/publique utilisateur

Créer tout d’abord une clef publique et une clef privée à un utilisateur :

$ cd
$ openssl req -newkey rsa:2048 -keyout cle-privee.key -out cle-publique.req

L’utilisateur a donc dans son home cle-privee.key et cle-publique.req.

Créer un certificat pour un utilisateur

Le certificat va être généré par l’autorité de certification. L’utilisateur donne sa clef publique à l’AC qui va la signer :

# openssl ca -in /home/user/cle-publique.req  -out /home/user/certificat-user.pem

Le mot de passe de la clef privée de l’AC sera demandé pour générer le certificat.

Utiliser le certificat de l’autorité pour générer le certificat PCKS12

Une fois que l’utilisateur est en possession de son certificat généré par l’AC, il peut se créer une clef PCKS12 :

$ openssl pkcs12 -export -in certificat-user.pem -inkey cle-privee.key -out pkcs-user.p12 -name "Prénom Nom"

openssl va demander le mot de passe de la clef-privée de l’utilisateur.

Il sera ensuite demandé un mot de passe pour le clef PCKS12.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *