1 Génération des clés SSL avec OpenSSL 1.1 Alice, Bob et Nestor FIGURE 1 Nestor génère les certificats, les clés privées et les listes de révocation 1.2 Installation de l outil SSL OpenSSL est maintenant inclus dans la distribution du serveur HTTP Apache 2.2. Création d un script de démarrage C :\tools\opensslenv.bat SET OPENSSL_HOME=E:\apache\bin SET PATH=%OPENSSL_HOME%;%PATH% SET BASE_HOME=C:\tools\ssl 1 Dominique Huguenin
IF NOT EXIST %BASE_HOME% ( mkdir %BASE_HOME% mkdir %BASE_HOME%\certs mkdir %BASE_HOME%\newcerts mkdir %BASE_HOME%\private ) cd %BASE_HOME% cmd lancer le script opensslenv.bat. A la première exécution, le script crée l arborescence ci-dessous. -tools -opensslenv.bat -openssl.config -ssl -certs # emplacement des certificats et listes de révocation -newcert # emplacement des certificats non-signés -private # emplacement des clés privées Création d un fichier vide C :\tools\ssl\index.txt Création d un ficher C :\tools\ssl\serial contenu uniquement la valeur 00. Création d un fichier de configuration C :\tools\openssl.config #---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 =./.rnd oid_file =./.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 2 Dominique Huguenin
#################################################################### [ CA_default ] dir =. # Emplacement de base certs = $dir/certs # Emplacement de stockage des # nouveaux certificats crl_dir = $dir/certs # Emplacement des nouvelles CRL database = $dir/index.txt # Fichier d index new_certs_dir = $dir/newcerts # Emplacement des nouveaux certificats certificate = $dir/certs/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 ] 3 Dominique Huguenin
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 = CH countryname_min = 2 countryname_max = 2 stateorprovincename = Etat ou province (nom complet) stateorprovincename_default = Neuchatel localityname = Ville localityname_default = Neuchatel 0.organizationName = Organisation (nom de l entreprise par exemple) 0.organizationName_default = ESNE # 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 = ig 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 4 Dominique Huguenin
# 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.entreprise.lan/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.entreprise.lan/ssl/ # Adresse de la CRL du moment. nscarevocationurl = https://www.entreprise.lan/ssl/entreprise-ca.crl # Adresse pour revoquer un certificat. #nsrevocationurl = https://www.entreprise.lan/ssl/revocation.html? # Adresse pour renouveller un certificat. #nsrenewalurl = https://www.entreprise.lan/ssl/renewal.html? # Adresse des pratiques de la CA. #nscapolicyurl = https://www.entreprise.lan/ssl/policy.html # Adresse du certificat du signataire. issueraltname = URI:https://www.entreprise.lan/ssl/cacert.crt # Adresse de la CRL du moment. crldistributionpoints = URI:https://www.entreprise.lan/ssl/entreprise-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 5 Dominique Huguenin
# 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.entreprise.lan/ssl/" # Adresse de base des autres URL si on n en donne pas # au cas par cas. nsbaseurl = https://www.entreprise.lan/ssl/ # Adresse de la CRL du moment. nscarevocationurl = https://www.entreprise.lan/ssl/entreprise-ca.crl # Adresse pour revoquer un certificat. nsrevocationurl = https://www.entreprise.lan/ssl/revocation.html? # Adresse pour renouveller un certificat. nsrenewalurl = https://www.entreprise.lan/ssl/renewal.html? # Adresse des pratiques de la CA. nscapolicyurl = https://www.entreprise.lan/ssl/policy.html # Adresse du certificat du signataire. issueraltname = URI:https://www.entreprise.lan/ssl/cacert.crt # Adresse de la CRL du moment. crldistributionpoints = URI:https://www.entreprise.lan/ssl/cacert.crl [ crl_ext ] # Extensions de CRL # Seuls issueraltname et authoritykeyidentifier se justifient dans une CRL. # issueraltname=issuer:copy authoritykeyidentifier=keyid:always,issuer:always #----End---- 1.3 Création d un certificat racine Nestor génére sa clé privée et son certification X509 auto-signé. 1.3.1 Création des clés exemple de commande : openssl req -config../openssl.config -new -x509 -keyout./private/cakey.pem -out./certs/cacert.pem -days 3650 E:\sysinfo\ssl>openssl req -config../openssl.config -new -x509 -keyout./private/cakey.pem -out./certs/cacert.pem -days 3650 Loading screen into random state - done Generating a 1024 bit RSA private key 6 Dominique Huguenin
...++++++...++++++ writing new private key to./private/cakey.pem Enter PEM pass phrase: [coucou ca] Verifying - Enter PEM pass phrase: [coucou ca] ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter., the field will be left blank. ----- Nom du pays (code sur 2 lettres) [CH]: Etat ou province (nom complet) [Neuchatel]: Ville [Neuchatel]: Organisation (nom de lentreprise par exemple) [ESNE]: Nom du departement dans lorganisation [ig]: Nom dusage []:CA Entreprise.lan Addresse e-mail []: 1.3.2 Création d un certificat x509 exemple de commande : openssl x509 -in./certs/cacert.pem -out./certs/cacert.crt C:\tools\ssl>openssl x509 -in./certs/cacert.pem -out./certs/cacert.crt Création d une demande de certificat Nestor génére la clé privée et le certificat X509 de Bob. 1.3.3 Création des clés exemple de commande : openssl req -config../openssl.config -new -keyout./private/dominique_huguenin.pem -out./newcerts/dominique_huguenin.pem -days 365 C:\tools\ssl>openssl req -config../openssl.config -new -keyout./private/domi nique_huguenin.pem -out./newcerts/dominique_huguenin.pem -days 365 Loading screen into random state - done Generating a 1024 bit RSA private key...++++++...++++++ writing new private key to./private/dominique_huguenin.pem Enter PEM pass phrase: [coucou dhu] Verifying - Enter PEM pass phrase: [coucou dhu] ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter., the field will be left blank. ----- Nom du pays (code sur 2 lettres) [CH]: Etat ou province (nom complet) [Neuchatel]: 7 Dominique Huguenin
Ville [Neuchatel]: Organisation (nom de lentreprise par exemple) [ESNE]: Nom du departement dans lorganisation [ig]: Nom dusage []:dominique huguenin Addresse e-mail []:dominique.huguenin@cpln.ch Please enter the following extra attributes to be sent with your certificate request Un mot de passe de challenge []: Nom optionnel []: 1.3.4 Signature de la clé public commande : openssl ca -config../openssl.config -policy policy_anything -out./certs/dominique_huguenin_cert.pem - infiles./newcerts/dominique_huguenin.pem C:\tools\ssl>openssl ca -config../openssl.config -policy policy_anything -out./certs/dominique_huguenin_cert.pem -infiles./newcerts/dominique_huguenin.pem Using configuration from../openssl.config Loading screen into random state - done Enter pass phrase for./private/cakey.pem: [coucou ca] Check that the request matches the signature Signature ok The Subject s Distinguished Name is as follows countryname :PRINTABLE: CH stateorprovincename :PRINTABLE: Neuchatel localityname :PRINTABLE: Neuchatel organizationname :PRINTABLE: ESNE organizationalunitname:printable: ig commonname :PRINTABLE: dominique huguenin emailaddress :IA5STRING: dominique.huguenin@rpn.ch Certificate is to be certified until Feb 2 09:06:23 2008 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated 1.3.5 Mise en place d un certificat x509 commande : openssl x509 -in./certs/dominique_huguenin_cert.pem -out./certs/dominique_huguenin_cert.crt C:\tools\ssl>openssl x509 -in./certs/dominique_huguenin_cert.pem -out./certs/dominique_huguenin_cert.crt 1.4 Emploi du certificat S/MIME avec MS Outlook 1.4.1 Génération de la clé pkcs12 commande : openssl pkcs12 -export -in./certs/dominique_huguenin_cert.pem -inkey./private/dominique_huguenin.pem -certfile./certs/cacert.pem -out./private/dominique_huguenin.p12 -name "dominique huguenin" C:\tools\ssl>openssl pkcs12 -export -in./certs/dominique_huguenin_cert.pem -i nkey./private/dominique_huguenin.pem -certfile./certs/cacert.pem -out./privat e/dominique_huguenin.p12 -name "dominique huguenin" 8 Dominique Huguenin
Loading screen into random state - done Enter pass phrase for./private/dominique_huguenin.pem: [coucou dhu] Enter Export Password: [coucou p12] Verifying - Enter Export Password: [coucou p12] 1.4.2 Configuration dans MS Outlook Outil>Option>Sécurité > sélectionner le bouton "Importer/Exporter" Dans le fenêtre Importation/Exportation champs Importer le fichier : > sélectionner le bouton Parcourir... rechercher le fichier./private/dominique_huguenin.p12 champs "Mot de passe" : [coucou p12] champs "Numéro d identification numérique" : dominique huguenin 1.4.3 Vérification Démarrer un console mmc Ajouter le composant logiciel enfichable "Certificats" Dans la branche "Personnel/Certificats ", on retrouve le certificat importé "dominique huguenin". Dans la branche "Autorités de certification racines/certificats", on retrouve le certificat de notre autorité de certification "CA DHU" 1.5 Révocation d un certificat Nestor génére la liste de révocation La commande suivante révoque un certificat : openssl -revoke newcert.pem La base de données index.txt est modifiée en conséquence et le certificat est annoté comme révoqué. Il reste à régénérer la liste de révocation des certificats : openssl ca -gencrl -config../openssl.config -out./crl/entreprise-ca.crl La liste de révocation (CRL/Certificate Revokation List) doit être rendue publique, par exemple sur un site web. 1.6 Publication des certificats et listes de révocation Nestor publie les certificats X509 et la liste de révocation. L autorité de certification (CA) spécifie dans le certificat l emplacement (url) de son certificat racine (openssl.config - issueraltname ) et celui de la liste de révocation (openssl.config - nscarevocationurl). Il doit donc publier sur un site web ces deux informations (certificat racine et liste de révocation). Etapes de validation d un certificat 1. Vérification que le certificat n apparaît pas dans la liste de révocation 2. Vérification que le hachage de la partie infomation du certificat est identique avec la signature décelée du certificat. 1.7 Ajouter le certificat racine dans un domaine Windows Alice prend dans le dépôt le certificat du Nestor (CA) et le pose dans son trousseau de clé. Le but est rendre disponible à toutes les machines du domaine un certificat racine. Pour ce faire, la procédure consiste à : Créer une stratégie de groupe sur une unité organisationnelle (ou) dans l Active Directory Importer le certificat racine (format x509,.crt) dans la branche Configuration ordinateur>paramètres de sécurité>stratégie de clé publique>autorité de certification racine de confiance. (menu contextuelle importer sur la branche) 9 Dominique Huguenin
FIGURE 2 Importation du certificat racine dans Active Directory 10 Dominique Huguenin