Les certfcats Cette documentation a pour but de créer des certificats afin d'authentifier et de chiffrer les échanges entre un serveur et plusieurs clients. Openssl est un outil de cryptographie qui sert entre autre à : - Créer une Autorité de Certification pour un serveur. - Chiffrer des données entre une application serveur et une application cliente (http, vpn, etc...). - Chiffrer et déchiffrer des fichiers sur un disque. - Identifier des machines clientes auprès de serveurs. Quelques mots importants IGC : Interface de Gestion des Clés. L'IGC permet de : - Emettre les certificats. - Les révoquer. - Les publier dans un annuaire. AC : Autorité de Certification. Une AC possède une bi-clé pour signer les clés publiques (et en faire des certificats). Certificat : Clé publique signée par une AC. Grâce à l'utilisation des certificats, aucune donnée n'est transmise en clair lors de l'authentification. Le certificat permet de : - Chiffrer les communications - Authentifier des utilisateurs - Authentifier des machines - Chiffrer des fichiers - Signer des fichiers Pour vérifier l'authenticité d'un certificat, l'igc met à disposition : - La clé publique de son AC racine sous la forme d'un certificat auto-signé. - Les certificats des utilisateurs. X.509 : norme qui permet de gérer les certificats. Installation de openssl L'installation par elle même n'est pas très compliquée... apt-get install openssl En principe openssl est déjà installé. Configuration d'openssl Les différents fichiers sont dans le répertoire /etc/ssl. Dans /etc/ssl : deux répertoires certs et private, ainsi que le fichier de configuration openssl.cnf qui va être utilisée pour générer les clefs et les certificats. Faire une copie du fichier openssl.cnf.
Modifier ou remarquer les valeurs suivantes dans le fichier à l'intérieur de la section CA_default, pour comprendre les créations d'index.txt, newcerts, ca. Il est tout à fait possible de prendre d'autres paramètres et de modifier ce fichier selon ses goûts. Modifier le fichier de configuration d'openssl en spécifiant bien les répertoires et les noms des fichiers de la clé privée et du certificat de l'autorité de certification (extraits du fichier) ################################################################# ### [ ca ] default_ca = CA_default # The default ca section ################################################################# ### [ CA_default ] dir = /etc/ssl # 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/ca/ca_ies.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/ca/ca_ies.key # 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
Ce fichier contient les paramètres de configuration pour la gestion des certificats mais également la liste des paramètres (et leur structure) à inclure dans les certificats. Il est possible d'utiliser plusieurs fichiers pour générer différentes sortes de certificats (suppression de certains paramètres comme par exemple le challengepassword qu'il peut être utile de supprimer lors de la création de certificats pour un service (Apache2, Postfix.). Créer un répertoire ca pour stocker les différents fichiers de l'autorité de certification. mkdir ca Pour éviter d'avoir des erreurs à la première création de clés : Créer un fichier index.txt qui va contenir les numeros de série des certificats avec leurs paramètres. touch /etc/ssl/index.txt Créer un fichier serial qui va contenir le numéro de série courant : echo 01 > /etc/ssl/serial Installation de l'autorité de certification sur l'ac Génération de la clef privée de l'ac (Autorité de Certification) et de son certificat openssl req -new -x509 -extensions v3_ca -sha1 -newkey rsa:4096 -nodes -days 3650 -keyout ca/ca_ies.key -out ca/ca_ies.pem Generating a 4096 bit RSA private key...++...++ writing new private key to 'ca/ca_ies.key' 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. Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:Herault Locality Name (eg, city) []:Montpellier Organization Name (eg, company) [Internet Widgits Pty Ltd]:IES Organizational Unit Name (eg, section) []:Reseau Common Name (eg, YOUR name) []:Stephane Email Address []:Stephane.Arnal@ies.univ-montp2.fr Pour utiliser un autre fichier de configuration que celui par défaut ou modifier la destination des fichiers en sortie : openssl req -new -x509 -config openssl.cnf -extensions v3_ca -sha1 -newkey rsa:4096 -nodes -days 3650 -keyout certs/ca_ies.key -out certs/ca_ies.pem Récupérer le certificat de l'ac qui est dans ce cas ca_ies.pem. C'est ce fichier que chaque client devra importer pour certifier les clefs des serveurs.
Installation du certificat de l'autorité de certification sur un client Le certificat ou clé publique de l'ac va permettre à chaque client de vérifier que le certificat du service ou serveur est valide. Sous mac OSX : Pour valider l'autorité de certification par tout le système, il est nécessaire de stocker son certificat dans le Trousseau d'accès. Menu Aller, Applications, Catégorie Utilitaires, Trousseau d'accès Menu Fichier, Importer des éléments Choisir le fichier et cliquer sur Ouvrir
Le certificat doit apparaître dans le menu Certificats L'autorité de certification est maintenant enregistrée et validée. Lors de l'accès aux services fournissant un certificat signé par l'autorité aucune question ne sera posée, les échanges seront automatiquement chiffrés. D'autres applications sous d'autres systèmes nécessitent d'enregistrer l'autorité de certification au sein de l'application elle même. Ci-dessous, un exemple avec Firefox, mais quelle que soit l'application, chercher la partie de la configuration qui permet de gérer les certificats et rajouter celui de l'autorité de certification, ici ca_ies.pem. Exemple sur Firefox (Mac OSX) : Menu Firefox, Préférences
Onglet Avancé, onglet Chiffrement, Cliquer sur Afficher les certificats Onglet Autorités, cliquer sur Importer Choisir le certificat ca_ies.pem. Le certificat de l'autorité est maintenant bien enregistré.
Utilisation des certificats pour un serveur web, webmail.ies.univ-montp2.fr Génération de la demande certificat et de la clé privée Attention : Common Name doit être le nom de votre serveur! openssl req -newkey rsa:4096 -keyout serveurs/webmail.key -out serveurs/webmail.csr Generating a 4096 bit RSA private key...++.........++ writing new private key to 'serveurs/webmail.key' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: 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. Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:Herault Locality Name (eg, city) []:Montpellier Organization Name (eg, company) [Internet Widgits Pty Ltd]:IES Organizational Unit Name (eg, section) []:Reseau Common Name (eg, YOUR name) []:webmail.ies.univ-montp2.fr Email Address []:Stephane.Arnal@ies.univ-montp2.fr Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:accesweb2011 An optional company name []:IES
Création et signature du certificat pour le serveur openssl ca -in serveurs/webmail.csr -out serveurs/webmail.pem Using configuration from /usr/lib/ssl/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 2 (0x2) Validity Not Before: Nov 12 09:47:03 2011 GMT Not After : Nov 11 09:47:03 2012 GMT Subject: countryname = FR stateorprovincename = Herault organizationname = IES organizationalunitname = Reseau commonname = webmail.ies.univ-montp2.fr emailaddress = Stephane.Arnal@ies.univ-montp2.fr X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: FF:BF:0E:C4:DB:B4:87:1D:99:F4:82:82:4B:02:69:7F:00:39:F6:EE X509v3 Authority Key Identifier: keyid:49:f2:2c:b1:92:87:2f:8a:be:eb:9a:de:59:2e:3a:c5:ac:87:71:e2 Certificate is to be certified until Nov 11 09:47:03 2012 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 Supprimer le fichier web.csr qui ne sert plus à rien et contient des informations. rm serveurs/webmail.csr Récupérer les fichiers webmail.pem et webmail.key. Installation des clés Copier les fichiers webmail.pem (certificat, fichier signé par l'ac) et webmail.key (clé privée du serveur) dans le répertoire choisi, ici /etc/apache2/ssl/serveurs/ Editer et modifier le fichier de configuration /etc/apache2/webmail
<VirtualHost 162.38.134.18> # serveur Webmail IES ServerAdmin webmaster@ies.univ-montp2.fr DocumentRoot "/var/www/webmail/" ServerName webmail.ies.univ-montp2.fr # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on # A self-signed (snakeoil) certifcate can be created by installing # the ssl-cert package. See # /usr/share/doc/apache2.2-common/readme.debian.gz for more info. # If both key and certifcate are stored in the same fle, only the # SSLCertifcateFile directive is needed. # SSLCertifcateFile /etc/apache2/ssl/webmail.crt # SSLCertifcateKeyFile /etc/apache2/ssl/webmail.key SSLCertifcateFile /etc/apache2/ssl/serveurs/webmail.pem SSLCertifcateKeyFile /etc/apache2/ssl/serveurs/ webmail.key #ErrorLog logs/host.some_domain.com-error_log #CustomLog logs/host.some_domain.com-access_log common </VirtualHost> Attention : au redémarrage d'apache2, le mot de passe sera demandé pour la clef privée!!! Utilisation des certificats avec Postfix Génération de la demande certificat et de la clé privée openssl req -newkey rsa:4096 -keyout serveurs/imap.key -out serveurs/imap.csr Generating a 4096 bit RSA private key......++..++ writing new private key to 'serveurs/imap.key' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: 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. Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:Herault Locality Name (eg, city) []:Montpellier Organization Name (eg, company) [Internet Widgits Pty Ltd]:IES Organizational Unit Name (eg, section) []:Reseau
Common Name (eg, YOUR name) []:imap.ies.univ-montp2.fr Email Address []:Stephane.Arnal@ies.univ-montp2.fr Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:accesmail2011 An optional company name []:IES Signature du certificat openssl ca -in serveurs/imap.csr -out serveurs/imap.pem Using configuration from /usr/lib/ssl/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 3 (0x3) Validity Not Before: Nov 13 14:55:21 2011 GMT Not After : Nov 12 14:55:21 2012 GMT Subject: countryname = FR stateorprovincename = Herault organizationname = IES organizationalunitname = Reseau commonname = imap.ies.univ-montp2.fr emailaddress = Stephane.Arnal@ies.univ-montp2.fr X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: DA:67:C0:E8:38:3D:B1:A0:7A:BB:7A:83:F4:48:C3:F3:CD:2A:88:9F X509v3 Authority Key Identifier: keyid:49:f2:2c:b1:92:87:2f:8a:be:eb:9a:de:59:2e:3a:c5:ac:87:71:e2 Certificate is to be certified until Nov 12 14:55:21 2012 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 Récupérer les fichiers imap.pem et imap.key. Installation des clés pour le serveur Postfix Editer le fichier /etc/dovecot/dovecot.conf, Posfix laisse la possibilité d'entrer le mot de passe de la clé privée à ce niveau. Copier les fichiers imap.pem et imap.key dans /etc/dovecot/ssl/. Pour plus d'informations sur Postfix et ssl, lire la documentation sur Postfix/Dovecot, Envoi sécurisé
PEM encoded X.509 SSL/TLS certifcate and private key. They're opened before # dropping root privileges, so keep the key fle unreadable by anyone but # root. #ssl_cert_fle = /etc/ssl/certs/dovecot.pem #ssl_key_fle = /etc/ssl/private/dovecot.pem ssl_cert_fle = /etc/dovecot/ssl/imap.pem ssl_key_fle = /etc/dovecot/ssl/imap.key # If key fle is password protected, give the password here. Alternatively # give it when starting dovecot with -p parameter. Since this fle is often # world-readable, you may want to place this setting instead to a diferent # root owned 0600 fle by using!include_try <path>. ssl_key_password = mot_de_passe_cle_privee Certificat sans mot de passe Certains services peuvent avoir des problèmes avec la gestion du mot de passe de la clé privée. Il existe la possibilité de supprimer le chiffrement et d'utiliser le fichier original mais le niveau de sécurité s'en trouve ammoindri. Plus d'infos sur http://httpd.apache.org/docs/2.3/fr/ssl/ssl_faq.html#removepassphrase Création de la clé privée openssl genrsa -des3 -out serveurs/smtp.key 1024 Generating RSA private key, 1024 bit long modulus...++++++...++++++ e is 65537 (0x10001) Enter pass phrase for serveurs/smtp.key: Verifying - Enter pass phrase for serveurs/smtp.key: Retrait du mot de passe openssl rsa -in serveurs/smtp.key -out serveurs/smtp.key Enter pass phrase for serveurs/smtp.key: writing RSA key Nouvelle demande de certificat avec la clé privée sans mot de passe openssl req -new -key serveurs/smtp.key -out serveurs/smtp.csr 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. Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:Herault Locality Name (eg, city) []:Montpellier Organization Name (eg, company) [Internet Widgits Pty Ltd]:IES Organizational Unit Name (eg, section) []:Reseau Common Name (eg, YOUR name) []:smtp.ies.univ-montp2.fr
Email Address []:Stephane.Arnal@ies.univ-montp2.fr Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:IES Création du certificat openssl ca -in serveurs/smtp.csr -out serveurs/smtp.pem Using configuration from /usr/lib/ssl/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 4 (0x4) Validity Not Before: Nov 17 09:37:13 2011 GMT Not After : Nov 16 09:37:13 2012 GMT Subject: countryname = FR stateorprovincename = Herault organizationname = IES organizationalunitname = Reseau commonname = smtp.ies.univ-montp2.fr emailaddress = Stephane.Arnal@ies.univ-montp2.fr X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 48:F1:8C:3E:B3:F5:43:C1:3C:BA:F2:B8:62:37:49:46:F7:A1:B8:9B X509v3 Authority Key Identifier: keyid:49:f2:2c:b1:92:87:2f:8a:be:eb:9a:de:59:2e:3a:c5:ac:87:71:e2 Certificate is to be certified until Nov 16 09:37:13 2012 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 Génération d'un certificat auto-signé Pour chiffrer vos données sans authentification, il est possible de créer des certificats auto-signés. openssl req -config /etc/ssl/openssl.cnf -new -out davical.csr Generating a 1024 bit RSA private key...++++++...++++++
writing new private key to 'privkey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: 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. Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:FR Locality Name (eg, city) []:Montpellier Organization Name (eg, company) [Internet Widgits Pty Ltd]:IES Organizational Unit Name (eg, section) []:DAViCal Common Name (eg, YOUR name) []:davical.ies.univ-montp2.fr Email Address []:Stephane.Arnal@ies.univ-montp2.fr Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:IES openssl rsa -in privkey.pem -out davical.key Enter pass phrase for privkey.pem: writing RSA key openssl x509 -in davical.csr -out davical.crt -req -signkey davical.key -days 3650 subject=/c=fr/st=fr/l=montpellier/o=ies/ou=davical/cn=davical.ies.univmontp2.fr/emailaddress=stephane.arnal@ies.univ-montp2.fr Getting Private key openssl x509 -in davical.crt -out davical.der.crt -outform DER Liens http://www.404blog.net/?p=165 http://linux-attitude.fr/post/autorite-de-certification-openssl http://ferry.eof.eu.org/lesjournaux/ll/public_html/ch11s05.html http://www.brianmadden.com/forums/t/23283.aspx http://www.linux-france.org/prj/edu/archinet/systeme/ch24s03.html http://httpd.apache.org/docs/2.3/fr/ssl/ssl_faq.html#removepassphrase http://www.bortzmeyer.org/postfix-tls.html https://www.certificat.fr/fr/support/manuels/apache/serveur+apache+http/générer+un+ csr/ Stephane.Arnal@ies.univ-montp2.fr