Guide pratique des certificats SSL: Version française du SSL Certificates HOWTO | ||
---|---|---|
Précédent | Chapitre 2. Gestion des certificats | Suivant |
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
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"; |
/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
Plusieurs variables se présentent avec les suffixes _default, _min et _max pour leurs valeurs minimales ou leurs nombres minimaux et maximaux de caractères respectivement.
Le fichier est basé sur des [Sections] de variables.
répertoire de base.
désigne la section des variables pour un certificat dont le type n'est pas spécifié.
définit l'usage du certificat. CA:TRUE désigne un certificat de CA racine par exemple.
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.
Précédent | Sommaire | Suivant |
Gestion des certificats | Niveau supérieur | Création d'une autorité de certification racine |