2.1. Installation

De nos jours l'installation d'OpenSSL ne soul�ve gu�re de difficult�s. Les distributions incluent des gestionnaires de paquets. Reportez-vous � la documentation de votre distribution ou aux fichiers README et INSTALL qu'inclut l'archive tar d'OpenSSL. Ce guide pratique n'a pas pour objectif de traiter de l'installation mais de l'utilisation.

Je d�cris quelques options d'installation standard dont la connaissance est n�cessaire pour les exemples qui suivent. Votre installation peut diff�rer.

Les certificats OpenSSL sont stock�s dans /var/ssl. Toutes les commandes et r�pertoires de ce document partent de /var/ssl. Ce n'est pas indispensable mais les exemples en sont facilit�.

OpenSSL cherche par d�faut son fichier de configuration dans /usr/lib/ssl/openssl.cnf. Ajoutez donc syst�matiquement -config /etc/openssl.cnf aux commandes telles openssl ca et openssl req (par exemple). Je me sers de /etc/openssl.cnf pour maintenir l'ensemble des fichiers de configuration dans /etc.

Les utilitaires et diverses biblioth�ques se trouvent dans /usr/lib/ssl

2.1.1. L'utilitaire CA.pl

V�rifiez que CA.pl se trouve dans un r�pertoire qui figure dans le chemin d'acc�s par d�faut aux programmes. Il peut se trouver dans le r�pertoire /usr/lib/ssl. CA.pl permet de masquer la complexit� des commandes openssl. Je l'utilise dans tous les exemples en indiquant entre crochets l'�quivalent openssl.

Modifiez CA.pl de fa�on � ce que les appels � openssl ca et openssl req incluent l'option -config /etc/openssl.cnf.

#$SSLEAY_CONFIG=$ENV{"SSLEAY_CONFIG"};
$SSLEAY_CONFIG="-config /etc/openssl.cnf";
#$CATOP="./demoCA";
$CATOP="/var/ssl";

2.1.2. Le fichier openssl.cnf

/etc/openssl.cnf doit �tre configur� de fa�on � minimiser les donn�es � renseigner � chaque invocation des utilitaires.

#---Begin---
#
# Fichier de configuration pour OpenSSL.
# S'emploie surtout pour les demandes de certificats.
#
# NdT: autre chose que de l'ASCII dans les fichiers de
# configuration me rend nerveux. Il y a donc un zest de triche
# dans ce qui suit. Vous ne voudriez pas me rendre nerveux, non ? :o)
#
RANDFILE  = $ENV::HOME/.rnd
oid_file  = $ENV::HOME/.oid
oid_section  = new_oids
# Section des extension X.509v3 pour se servir du
# fichier avec l'option -extfile de la commande
# "openssl x509"
# extensions  =
# (Variante: employer un fichier de configuration qui
# n'a que des extensions X.509v3 dans sa section
# principale [= default])
[ new_oids ]
# On ajoute des OID pour les commandes 'ca' et 'req'.
# Par exemple:
# testoid1=1.2.3.4
# L'emploi de substitutions est possible:
# testoid2=${testoid1}.5.6
####################################################################
[ ca ]
default_ca = CA_default  # Section de la CA standard
####################################################################
[ CA_default ]
dir             = /var/ssl                # Emplacement de base
certs           = $dir/certs              # Emplacement de stockage des nouveaux certificats
crl_dir         = $dir/crl                # Emplacement des nouvelles CRL
database        = $dir/index.txt          # Fichier d'index
new_certs_dir   = $dir/newcerts           # Emplacement des nouveaux certificats
certificate     = $dir/cacert.pem         # Certificat de la CA
serial          = $dir/serial             # Numero de serie en cours
crl             = $dir/crl.pem            # CRL en cours
private_key     = $dir/private/cakey.pem  # Clef privee
RANDFILE        = $dir/private/.rand      # Fichier d'alea
x509_extensions = usr_cert                # Extensions pour les certificats
# Extensions pour la CRL. Remarque: Netscape communicator n'aime pas les CRL de version 2,
# on commente donc pour avoir une CRL version 1
# crl_extensions = crl_ext
default_days    = 365                     # Duree de vie d'un certificat
default_crl_days= 7                       # Intervalle entre CRLs
default_md      = sha1                    # Algorithme de hachage
preserve        = no                      # Conserve-t-on l'ordre du DN ?
# Diverses facons de specifier l'allure des requetes
# Pour une requete de type CA, les attributs doivent etre les memes
# Les champs 'optional' et 'supplied' correspondent respectivement
# a des champs optionnels et fournis :o)
policy  = policy_match
# Typage CA
[ policy_match ]
countryName            = match
stateOrProvinceName    = optional
localityName           = match
organizationName       = match
organizationalUnitName = optional
commonName             = supplied
emailAddress           = optional
# Typage tout-venant
# Tous les types d'objets acceptables doivent etre enumeres
[ policy_anything ]
countryName            = optional
stateOrProvinceName    = optional
localityName           = optional
organizationName       = optional
organizationalUnitName = optional
commonName             = supplied
emailAddress           = optional
####################################################################
[ req ]
default_bits       = 1024
default_keyfile    = privkey.pem
distinguished_name = req_distinguished_name
attributes         = req_attributes
default_md         = sha1
x509_extensions    = v3_ca # Extensions pour un certificat auto-signant
# Mot de passe pour les clefs privees (l'application le demande s'il est vide).
# input_password = secret
# output_password = secret
# Masque pour les types de chaines valides. Plusieurs choix sont possibles.
# default: PrintableString, T61String, BMPString.
# pkix : PrintableString, BMPString.
# utf8only: only UTF8Strings.
# nombstr : PrintableString, T61String (pas de BMPStrings ni de UTF8Strings).
# MASK:XXXX valeur litterale.
# Attention: certaines versions de Netscape plantent sur les BMPStrings ou les UTF8Strings.
# A utiliser avec prudence!
string_mask = nombstr
# req_extensions = v3_req # Extensions pour une demande de certificat
[ req_distinguished_name ]
countryName         = Nom du pays (code sur 2 lettres)
countryName_default = FJ
countryName_min     = 2
countryName_max     = 2
stateOrProvinceName         = Etat ou province (nom complet)
stateOrProvinceName_default = Fiji
localityName          = Ville
localityName_default  = Suva
0.organizationName         = Organisation (nom de l'entreprise par exemple)
0.organizationName_default = SOPAC
# Possible mais pas normalement pas necessaire :-)
#1.organizationName         = Second nom de l'organization
#1.organizationName_default = World Wide Web SARL
organizationalUnitName         = Nom du departement dans l'organisation
organizationalUnitName_default = ITU
commonName       = Nom d'usage
commonName_max   = 64
emailAddress     = Addresse e-mail
emailAddress_max = 40
# SET-ex3   = SET extension number 3
[ req_attributes ]
challengePassword     = Un mot de passe de challenge
challengePassword_min = 4
challengePassword_max = 20
unstructuredName      = Nom optionnel
[ usr_cert ]
# Extensions ajoutees quand 'ca' signe une requete.
# Contraire aux suggestions PKIX mais des CA le font et certains
# logiciels le demandent pour ne pas confondre un certificat
# utilisateur avec un certificat de CA
basicConstraints=CA:FALSE
# Examples d'utilisation de nsCertType. En cas d'omission,
# le certificat peut servir a tout sauf a signer des objets
# Serveur SSL
# nsCertType   = server
# Certificat promis a signer des objets.
# nsCertType = objsign
# Client normal.
# nsCertType = client, email
# Tout.
# nsCertType = client, email, objsign
# Classique pour un certificat client.
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
# Pour la boiboite de commentaire de Netscape.
nsComment  = "Certificate issued by https://www.sopac.org/ssl/"
# Recommandations PKIX sans effets secondaires facheux.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
# On importe l'adresse e-mail
# pour les attributs subjectAltName et issuerAltname.
# subjectAltName=email:copy
# Informations relatives au sujet.
# issuerAltName=issuer:copy
# Adresse de base des autres URL si on n'en donne pas
# au cas par cas.
nsBaseUrl  = https://www.sopac.org/ssl/
# Adresse de la CRL du moment.
nsCaRevocationUrl = https://www.sopac.org/ssl/sopac-ca.crl
# Adresse pour revoquer un certificat.
nsRevocationUrl  = https://www.sopac.org/ssl/revocation.html?
# Adresse pour renouveller un certificat.
nsRenewalUrl  = https://www.sopac.org/ssl/renewal.html?
# Adresse des pratiques de la CA.
nsCaPolicyUrl  = https://www.sopac.org/ssl/policy.html.
# Adresse du certificat du signataire.
issuerAltName = URI:https://www.sopac.org/ssl/sopac.crt.
# Adresse de la CRL du moment.
crlDistributionPoints = URI:https://www.sopac.org/ssl/sopac-ca.crl
[ v3_ca ]
# Extensions d'une CA standard
# Recommandation PKIX
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
# Recommandation PKIX que certains bugware n'aiment pas
# basicConstraints = critical,CA:true
# On utilise donc plutot ceci
basicConstraints = CA:true
# Emploi de la clef: typique d'un certificat de CA.
# On le laisse inactif pour prevenir l'emploi d'un
# certificat auto-signant de test.
# keyUsage = cRLSign, keyCertSign
# En fonction des besoins.
# nsCertType = sslCA, emailCA
# On inclut l'adresse e-mail dans le nom alternatif du sujet (recommendation PKIX)
# subjectAltName=email:copy
# On copie les informations du signataire
# issuerAltName=issuer:copy
# Encodage DER en base 16 d'une extension: licence de pilotage requise!
# 1.2.3.5=RAW:02:03
# On peut surcharger une extension standard:
# basicConstraints= critical, RAW:30:03:01:01:FF
# Message pour la boite d'affichage de Netscape.
nsComment  = "Certificat en provenance de https://www.sopac.org/ssl/"
# Adresse de base des autres URL si on n'en donne pas
# au cas par cas.
nsBaseUrl  = https://www.sopac.org/ssl/
# Adresse de la CRL du moment.
nsCaRevocationUrl = https://www.sopac.org/ssl/sopac-ca.crl
# Adresse pour revoquer un certificat.
nsRevocationUrl  = https://www.sopac.org/ssl/revocation.html?
# Adresse pour renouveller un certificat.
nsRenewalUrl  = https://www.sopac.org/ssl/renewal.html?
# Adresse des pratiques de la CA.
nsCaPolicyUrl  = https://www.sopac.org/ssl/policy.html
# Adresse du certificat du signataire.
issuerAltName = URI:https://www.sopac.org/ssl/sopac.crt
# Adresse de la CRL du moment.
crlDistributionPoints = URI:https://www.sopac.org/ssl/sopac-ca.crl
[ crl_ext ]
# Extensions de CRL
# Seuls issuerAltName et authorityKeyIdentifier se justifient dans une CRL.
# issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always,issuer:always
#----End----

Quelques remarques au sujet du fichier openssl.cnf

dir�:

r�pertoire de base.

default_ca�:

d�signe la section des variables pour un certificat dont le type n'est pas sp�cifi�.

basicConstraints�:

d�finit l'usage du certificat. CA:TRUE d�signe un certificat de CA racine par exemple.

2.1.3. Cr�ation de l'autorit� de certification

Utilisez la commande suivante apr�s avoir modifi� de fa�on ad�quate le fichier openssl.cnf�:

CA.pl -newca

L'utilitaire demande de choisir un fichier contenant le certificat de l'AC ou bien il propose d'en cr�er un. A titre d'exercice, laissez vous guider dans la cr�ation d'une AC. La partie suivante remplace cette AC par une AC de dur�e de vie plus importante. CA.pl ne g�n�re que des certificats valables 365 jours.

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:21