Autorité de certification, le retour

Niveau : Star Star Star Star Empty
Résumé :

Après avoir vu il y a long­temps com­ment créer le cer­ti­fi­cat d’une auto­rité de cer­ti­fi­ca­tion per­son­nelle et com­ment l’ins­tal­ler là où c’est néces­saire, nous allons voir les métho­des pour gérer une auto­rité de cer­ti­fi­ca­tion.

Une fois l’auto­rité créée, l’acti­vité prin­ci­pale d’une auto­rité est de signer des cer­ti­fi­cats. Et plu­tôt que de taper tous les para­mè­tres à la main, il est plus sim­ple de dis­po­ser d’une con­fi­gu­ra­tion, ce qu’openssl nous pro­pose. De plus, openssl dis­pose d’une com­mande per­met­tant une ges­tion sim­pli­fiée d’une auto­rité.

Pas­sons en revue la con­fi­gu­ra­tion (reprise du fichier par défaut /etc/ssl/openssl.cnf). Par­lons direc­te­ment de la sec­tion gérant l’auto­rité elle-même :

# Section pour la commande ca
[ ca ]
# Autorité par défaut (pour en gérer plusieurs)
default_ca      = Peck_authority 

# Section spécifique à mon autorité
[ Peck_authority ]

# Tous les répertoires de base
dir             = /srv/Authority        # Where everything is kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
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
private_key     = $dir/private/cakey.pem# The private key
RANDFILE        = $dir/private/.rand    # private random number file

Ensuite les options spé­ci­fi­ques :

# Mettre à no pour permettre à une entité de disposer de plusieurs certificats
#unique_subject = no

# Section contenant les extensions à utiliser
x509_extensions = usr_cert              # The extentions to add to the cert

# Format d'affichage des données en ligne de commande
name_opt        = ca_default            # Subject Name options
cert_opt        = ca_default            # Certificate field options

# Ne pas utiliser sauf à faire infiniment confiance aux demandeurs (ou tout vérifier à la main)
# copy_extensions = copy

# Durée de validité des certificats émis
default_days    = 365
# Fonction de hashage à utiliser (ne pas utiliser md5 :-)
default_md      = sha1
# Réécrire le DN passé par le demandeur
preserve        = no

# Politique à utiliser pour la vérification de la demande
policy          = policy_match

Et main­te­nant les sous-sec­tions.

La poli­ti­que de véri­fi­ca­tion des deman­des est sim­pliste, elle ne sert qu’à véri­fier que la demande est valide, rien de plus. C’est à l’humain / le script / la PKI de véri­fier que la demande est la bonne et que le deman­deur est bien celui qu’il pré­tend.

# Liste des champs présents dans la demande et inclus dans le certificats (les autres seront supprimés).
# match = doit être la même que cette de l'AC
# supplied = obligatoire
# optional = optionnel
[ policy_match ]
countryName             = match
stateOrProvinceName     = match
organizationName        = supplied
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

Une sous-sec­tion pour défi­nir les exten­sions des cer­ti­fi­cats géné­rés :

[ usr_cert ]
# Le certificat ne peut pas servir d'autorité 
basicConstraints=CA:FALSE

# Usage autorisé du certificat (selon Netscape)
# client, server, email, objsign, reserved, sslCA, emailCA, objCA
nsCertType                    = client, email

# Usage autorisé du certificat (selon PKIX)
# digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement, keyCertSign, cRLSign, encipherOnly, decipherOnly
keyUsage = digitalSignature

# Commentaire inclu dans le certificat
nsComment                       = "Certificate from Peck"

# Génération automatique de l'identifiant du certificat
subjectKeyIdentifier=hash
# Génération de l'identifiant de la clé de signature
authorityKeyIdentifier=keyid,issuer

# ... 

Il existe une foul­ti­tude d’autres exten­sions, prin­ci­pa­le­ment les exten­sions défi­nies par Nets­cape et cel­les défi­nies par PKIX (groupe de tra­vail sur le x509) dans le RFC 5280 (§4.2). PKIX dis­pose d’une liste d’exten­sions (id-pe) mais leur docu­men­ta­tion doit être recher­chée dans les divers docu­ments du groupe de tra­vail.

Ces exten­sions sont à uti­li­ser lors­que vous avez des besoins spé­ci­fi­ques à une appli­ca­tion. Notez qu’une exten­sion peut tou­jours être pré­fixée de “cri­ti­cal” qui indi­que à l’uti­li­sa­teur du cer­ti­fi­cat qu’il doit le refu­ser s’il ne com­prend pas le sens de l’exten­sion en ques­tion (sinon elle est igno­rée). Fai­tes atten­tion, l’usage de cri­ti­cal peut se retour­ner con­tre vous.

Une fois la con­fi­gu­ra­tion prête, créez votre auto­rité :

$ mkdir /srv/Authority
$ cd /srv/Authority
$ mkdir newcerts private
$ echo "00" > serial
$ touch index.txt

Pla­cez-y votre cer­ti­fi­cat d’auto­rité et sa clé :

$ cp ca.crt /srv/Authority/cacert.pem
$ cp ca.key /srv/Authority/private/cakey.pem

Et voila, votre auto­rité est prête à être uti­li­sée. Pour exem­ple, comme d’hab le client crée une demande de cer­ti­fi­cat :

# Il se débrouille pour générer une requête au bon format avec l'outil qu'il veut
$ openssl req -new

Et vous le signez après en avoir véri­fié le con­tenu et l’auteur :

# Lecture de la demande
$ openssl req -in client.csr -text
#Signature de la demande
$ openssl ca -config openssl.cnf -in client.csr

Et le cer­ti­fi­cat signé à ren­voyer au client est dans le réper­toire new­certs sous le nom <serial>.pem

Vous ver­rez que des sau­ve­gar­des de fichier sont con­ser­vées pour per­met­tre d’annu­ler la der­nière opé­ra­tion.

Vus : 243
Publié par Peck : 100