Académique Documents
Professionnel Documents
Culture Documents
info
25/02/13 18:18
Jeyg.info
GNU/Linux/*nix && Open Source && Information Technology
Il existe des CA "publiques" (par exemple, Verisign). Ce sont des fournisseurs qui facturent la gnration du certificat. Afin de garantir leur identit, les CA signent le certificat donn avec leur cl prive. L'avantage des CA "publiques" et que la plupart des systmes d'exploitations possdent la cl publique de ces CA. Le dsavantage est que chaque certificat mis est payant et assez cher. Il peut tre trs intressant de crer son propre CA pour son rseau interne. Des conomies sont ralises, et nous ne dpendons plus d'une entreprise externe pour la vrification des certificats. Le problme est que les clients externes ne feront pas confiance nos certificats, cause de l'absence de la cl publique dans le systme d'exploitation. Ce n'est pas un problme bloquant dans le cadre d'un rseau interne, il suffira juste de transmettre la cl publique du CA nos clients.
http://jeyg.info/des-certificats-signes-par-votre-autorite-de-certification-avec-openssl/ Page 1 sur 12
Des certificats signs par votre autorit de certification avec OpenSSL - Jeyg.info
25/02/13 18:18
Nous allons travailler avec OpenSSL, qui nous fournira tous les outils ncessaires. # aptitude install openssl Pour accder la boite outil d'OpenSSL, il faudra entrer une commande du type : $ openssl commande [paramtres de la commande] J'expliquerai rapidement, dans cet article, les lignes que nous entrerons. Pour de plus amples dtails, sachez que chaque commande d'openssl possde sa page de man, accessible en tapant $ man commande
Prparation
Partons sur des bases saines en crant un dossier ddi au CA. Par exemple ici, un dossier certificate-authority dans notre rpertoire home. Dans ce dossier, nous allons crer quatre sous-dossiers : private : contiendra les cls privs pour le CA ainsi que pour les certificats que nous crerons. certs : contiendra les certificats pour le CA ainsi que pour les requtes que nous traiterons. newcerts : tout nouveau certificat cr sera galement copi dans ce rpertoire avec pour nom de fichier, un serial number. crl : contiendra le Certificate Revocation List. $ mkdir -p certificate-authority/{private,certs,newcerts,crl} Toujours dans le dossier certificate-authority, nous allons crer deux fichiers : index.txt : un utilis par OpenSSL pour stocker les informations des certificats signs serial : chaque certificat possde un serial. Ce fichier contient le serial du prochain certificat. La valeur est incrmente automatiquement. $ touch index.txt $ echo "01" > serial Dernire tape, copier le fichier de configuration d'OpenSSL vers notre CA et l'ajuster pour qu'il pointe vers les rpertoires et fichiers que nous venons de crer. $ cp /etc/ssl/openssl.cnf ca-config
http://jeyg.info/des-certificats-signes-par-votre-autorite-de-certification-avec-openssl/
Page 2 sur 12
Des certificats signs par votre autorit de certification avec OpenSSL - Jeyg.info
25/02/13 18:18
[ CA_default ] dir certs crl_dir database =. = $dir/certs = $dir/crl = $dir/index.txt # Where everything is kept # Where the issued certs are kept # Where the issued crl are kept # database index file. # Set to 'no' to allow creation of # several ctificates with same subject. new_certs_dir = $dir/newcerts certificate serial #crlnumber crl = $dir/certs/ca.crt = $dir/serial = $dir/crlnumber # default place for new certs. # The CA certificate # the current crl number
#unique_subject = no
= $dir/crl.pem
private_key = $dir/private/ca.key # The private key Note : toutes les commandes OpenSSL que nous allons aborder sont, avec cette configuration, excuter depuis le dossier certificate-authority. Toujours dans le fichier ca-config, vous pouvez ensuite modifier les valeurs par dfaut des certificats. [ req_distinguished_name ] countryName countryName_default countryName_min countryName_max stateOrProvinceName stateOrProvinceName_default localityName localityName_default 0.organizationName 0.organizationName_default organizationalUnitName = Country Name (2 letter code) = FR =2 =2 = State or Province Name (full name) = LANGUEDOC ROUSSILLON
= Locality Name (eg, city) = MONTPELLIER = Organization Name (eg, company) = JEYG = Organizational Unit Name (eg, section)
#organizationalUnitName_default = commonName commonName_max emailAddress emailAddress_max = Common Name (eg, YOUR name) = 64 = Email Address = 64
La dure de validit par dfaut des certificats peut galement tre modifie : default_days = 365 # how long to certify for
Enfin, vous pouvez dfinir quels champs devront tre prsents pour la cration d'un certificat. Notez qu'il vous faut au
http://jeyg.info/des-certificats-signes-par-votre-autorite-de-certification-avec-openssl/ Page 3 sur 12
Des certificats signs par votre autorit de certification avec OpenSSL - Jeyg.info
25/02/13 18:18
minimum un commonName. [ policy_anything ] countryName localityName organizationName commonName emailAddress = optional = optional = optional = supplied = optional = optional stateOrProvinceName
organizationalUnitName = optional
http://jeyg.info/des-certificats-signes-par-votre-autorite-de-certification-avec-openssl/
Page 4 sur 12
Des certificats signs par votre autorit de certification avec OpenSSL - Jeyg.info
25/02/13 18:18
$ openssl req -new -x509 -extensions v3_ca -newkey rsa:4096 -keyout private/ca.key -out certs/ca.crt -config ca-config Generating a 4096 bit RSA private key ..........................................................................++ ............................................................................++ writing new private key to 'private/ca.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) [FR]: State or Province Name (full name) [LANGUEDOC ROUSSILLON]: Locality Name (eg, city) [MONTPELLIER]: Organization Name (eg, company) [JEYG]: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:ca.jeyg.info Email Address []:root@localhost
Puisque le certificat sera utilis par un service, et donc qu'il n'y aura a priori pas d'interaction humaine possible lors de la lecture du certificat, il ne doit pas tre protg par une passphrase. $ openssl req -new -nodes -newkey rsa:2048 -keyout private/webserver.key -out webserver.csr -config ca-config Pas d'options nouvelles. Comme tout l'heure, l'option -nodes permet de ne pas spcifier de passphrase. On met le .csr en sortie avec le -out. Il vous est ici aussi demand de remplir des champs. Le champ commonName, qui doit correspondre l'URL du serveur.
http://jeyg.info/des-certificats-signes-par-votre-autorite-de-certification-avec-openssl/
Page 5 sur 12
Des certificats signs par votre autorit de certification avec OpenSSL - Jeyg.info
25/02/13 18:18
$ openssl req -new -nodes -newkey rsa:2048 -keyout private/webserver.key -out webserver.csr -config ca-config Generating a 2048 bit RSA private key .................................................................+++ .........................+++ writing new private key to 'private/webserver.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) [FR]: State or Province Name (full name) [LANGUEDOC ROUSSILLON]: Locality Name (eg, city) [MONTPELLIER]: Organization Name (eg, company) [JEYG]: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:jeyg.info Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
CSR PO UR UT I L ISATEUR
Cette fois-ci, le certificat est utilis par un humain. Il est donc possible et conseill de le protger avec une passphrase. $ openssl req -new -newkey rsa:2048 -keyout private/bill-murray.key -out bill-murray.csr -config ca-config Il s'agit des mmes options que pour le CSR serveur, mis part le -nodes qui a disparu. On remplit le champ commonName avec le nom du futur utilisateur.
http://jeyg.info/des-certificats-signes-par-votre-autorite-de-certification-avec-openssl/
Page 6 sur 12
Des certificats signs par votre autorit de certification avec OpenSSL - Jeyg.info
25/02/13 18:18
$ openssl req -new -newkey rsa:2048 -keyout private/bill-murray.key -out bill-murray.csr -config ca-config Generating a 2048 bit RSA private key .....................+++ .......................................................+++ writing new private key to 'private/bill-murray.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) [FR]: State or Province Name (full name) [LANGUEDOC ROUSSILLON]: Locality Name (eg, city) [MONTPELLIER]: Organization Name (eg, company) [JEYG]: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:bill-murray Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
http://jeyg.info/des-certificats-signes-par-votre-autorite-de-certification-avec-openssl/
Page 7 sur 12
Des certificats signs par votre autorit de certification avec OpenSSL - Jeyg.info
25/02/13 18:18
$ openssl ca -config ca-config -policy policy_anything -out certs/webserver.crt -infiles webserver.csr Using configuration from ca-config Enter pass phrase for ./private/ca.key: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Mar 20 23:26:58 2012 GMT Not After : Mar 18 23:26:58 2022 GMT Subject: countryName stateOrProvinceName localityName organizationName commonName X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: FA:2A:42:35:47:D0:91:A3:30:CC:30:FF:A8:75:28:CB:9C:6E:0E:66 X509v3 Authority Key Identifier: keyid:82:DD:48:75:CD:57:11:6B:8F:87:5D:18:47:71:D0:74:2E:D5:F9:11 Certificate is to be certified until Mar 18 23:26:58 2022 GMT (3650 days) Sign the certificate? [y/n]:y = FR = LANGUEDOC ROUSSILLON = JEYG = jeyg.info = MONTPELLIER
1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
http://jeyg.info/des-certificats-signes-par-votre-autorite-de-certification-avec-openssl/
Page 8 sur 12
Des certificats signs par votre autorit de certification avec OpenSSL - Jeyg.info
25/02/13 18:18
$ openssl x509 -in certs/webserver.crt -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=FR, ST=LANGUEDOC ROUSSILLON, L=MONTPELLIER, O=JEYG, CN=ca.jeyg.info/emailAddress=root@localhost Validity Not Before: Mar 20 23:26:58 2012 GMT Not After : Mar 18 23:26:58 2022 GMT [..] Vrifier qu'un certificat est valide pour le CA : $ openssl verify -CAfile certs/ca.crt certs/webserver.crt verify : utilitaire de vrification de certificats. -CAfile certs/ca.crt : le certificat du CA. certs.webserver.crt : le certificar vrifier. $ openssl verify -CAfile certs/ca.crt certs/webserver.crt certs/webserver.crt: OK
http://jeyg.info/des-certificats-signes-par-votre-autorite-de-certification-avec-openssl/
Page 9 sur 12
Des certificats signs par votre autorit de certification avec OpenSSL - Jeyg.info
25/02/13 18:18
Des manipulations spcifiques aux logiciels, navigateurs, peuvent tre ncessaires. Je vous laisse le plaisir de chercher comment raliser la mme dmarche sur Windows. Attention, le commonName du certificat doit tre strictement identique l'URL, sinon...
Conclusion
Nous avons vu comment mettre en place notre propre autorit de certification, crer des certificats adapts nos besoins avec cette autorit, retrouver leurs informations, et faire en sorte qu'ils soient reconnus sur les machines clientes, toujours grce au CA. OpenSSL est un outil trs puissant, aux multiples facettes. Aussi je vous recommande de lire le man plus en dtail pour dbusquer des options intressantes.
http://jeyg.info/des-certificats-signes-par-votre-autorite-de-certification-avec-openssl/ Page 10 sur 12
Des certificats signs par votre autorit de certification avec OpenSSL - Jeyg.info
25/02/13 18:18
Installation et premiers pas avec le gestionnaire de Ce contenu a t publi dans Auto-hbergement,configurations Systme par Chef Jeyg, et
marqu avec Debian, GNU/Linux, OpenSSL, planet-libre, scurit. Mettez-le en favori avec son permalien [http://jeyg.info/des-certificatssignes-par-votre-autorite-de-certification-avec-openssl/] .
2 RFLEXIONS AU SUJET DE DES CERTIFICATS SIGNS PAR VOTRE AUTORIT DE CERTIFICATION AVEC OPENSSL
Le 23 mars 2012 10 h 38 min, Eric DANNIELOU a dit : Bonjour, Toute les autorits de certification publique ne sont pas payantes. Il existe au moins une autorit de certification associative qui est cacerts.org. Il n'est pas obligatoire d'tre membre pour obtenir gratuitement un certificat sign. Cordialement, Eric
Le 23 mars 2012 14 h 19 min, Jeyg a dit : Oui, CACert est une excellente initiative, communautaire et gratuite. C'est la seule ma connaissance. Malheureusement elle n'est pas reconnue par la plupart des systmes et navigateurs web.
http://jeyg.info/des-certificats-signes-par-votre-autorite-de-certification-avec-openssl/
Page 11 sur 12
Des certificats signs par votre autorit de certification avec OpenSSL - Jeyg.info
25/02/13 18:18
http://jeyg.info/des-certificats-signes-par-votre-autorite-de-certification-avec-openssl/
Page 12 sur 12