Vous êtes sur la page 1sur 12

Des certificats signs par votre autorit de certification avec OpenSSL - Jeyg.

info

25/02/13 18:18

Jeyg.info
GNU/Linux/*nix && Open Source && Information Technology

Des certificats signs par votre autorit de certification avec OpenSSL


Publi le 21 mars 2012 par Jeyg
Une autorit de certification (AC ou CA pour certificate authority) est un tiers de confiance qui a un rle central dans le mcanisme d'une PKI. Pour initier une transaction scurise par SSL, un serveur doit fournir un certificat et une cl publique. Ce certificat doit tre sign par un CA afin de garantir son authenticit.

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

# The current serial number # must be commented out to leave a V1 CRL

= $dir/crl.pem

# The current CRL

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

Cration de l'autorit de certification


Pour cela, nous devons crer un certificat qui nous permettra de signer les demandes de certificats futures. $ openssl req -new -x509 -extensions v3_ca -newkey rsa:4096 -keyout private/ca.key -out certs/ca.crt config ca-config Les explications des paramtres, pour la plupart tires du man. req : utilitaire de gnration de certificats et de demandes de certificat PKCS#10. -new : nouvelle demande de certificat. -x509 : cette option gnre un certificat auto-sign la place d'une demande de certificat. Elle est utilise typiquement pour gnrer des certificats de test ou le certificat auto-sign racine d'une CA. -extensions v3_ca : permet de gnrer un certificat SSL v3, en se rfrant la section v3_ca du fichier de configuration d'OpenSSL. -newkey rsa:4096 : Gnration d'une cl prive RSA de 4096 bits. -keyout private/ca.key : donne le nom de fichier o la cl prive cre sera crite. -out certs/ca.crt : spcifie le nom du fichier (le certificat) de sortie. -config ca-config : permet d'utiliser un fichier de configuration alternatif, la place d'openssl.cnf. Si vous ne voulez pas chiffrer la cl prive, ajoutez l'option -nodes. Entrez la passphrase pour la cl prive puis les renseignements demands pour le certificat. Appuyez sur entre pour appliquer ceux que vous avez dfinis par dfaut dans le ca-config.

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

Cration du Certificate Signing Request (CSR)


Un CSR est un message qui, une fois soumis au CA, permet de gnrer un certificat. Nous allons aborder la gnration du CSR travers deux exemples : l'un destin un certificat pour serveur, l'autre pour un utilisateur.
CSR PO UR SE RVE UR

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 []:

Cration du certificat sign


Il ne reste plus qu' utiliser nos CSR pour gnrer nos certificats. $ openssl ca -config ca-config -policy policy_anything -out certs/webserver.crt -infiles webserver.csr ca : application CA minimale qui peut tre utilise pour signer des demandes de certificats. -config ca-config : permet d'utiliser un fichier de configuration alternatif, la place d'openssl.cnf. -policy policy_anything : cette option dfinit la politique de la CA utiliser. Il s'agit d'une section du fichier de configuration spcifiant les champs qui sont obligatoires ou qui doivent correspondre au certificat de la CA. -out certs/webserver.crt : spcifie le nom du fichier (le certificat) de sortie. -infiles webserver.csr : le ou les fichiers CSR utiliser.

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

Faire parler les certificats


Afficher les informations d'un certificat : $ openssl x509 -in certs/webserver.crt no-out --text x509 : utilitaire d'affichage et de signature de certificat. -in certs/webserver.crt : le certificat lire. -noout : permet de ne pas afficher le certificat encod. -text : afficher toutes les informations du certificat.

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

Les certificats reconnus par votre systme


Nous l'avons vu au tout dbut de cet article, il suffit d'importer la cl publique du CA sur notre machine cliente pour que les certificats signs par notre CA soient valids. Cette cl publique est incluse dans le certificat du CA. Pour un systme Debian, il suffit de copier le certificat dans le rpertoire /usr/share/ca-certificates/debconf.org. # cp ca.crt /usr/share/ca-certificates/debconf.org Bien entendu, libre vous de tlcharger le certificat du CA de la manire que vous prferez. Pourquoi pas l'automatiser avec un gestionnaire de configurations (Puppet ou Chef). Voila, comme par magie, les certificats gnrs par le CA sont reconnus par votre systme. Un exemple avec le certificat webserver cr tout l'heure, utilis sur un serveur web :

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

Sur ce, je vous souhaite de bonnes gnrations de certificats !


AR T ICLE S SI MI L AI RE S :

Installation et premiers pas avec le gestionnaire de Ce contenu a t publi dans Auto-hbergement,configurations Systme par Chef Jeyg, et

Un serveur XMPP personnel sous Debian en 5 minutes

Installez votre propre instance StatusNet

Dtection automatique du rseau Wi-Fi avec Guessnet

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

Vous aimerez peut-être aussi