You are on page 1of 22

Travaux pratique - SSL

Travaux pratique : OpenSSL Certificats X509


Prise en main de OpenSSL Certificats X509 Cration dune autorit de certification - Autorits secondaires Cration de certificats serveurs et utilisateurs - Signature Utilisation au sein dApacheSSL

Objectifs :
Cration dune autorit de certification principale, et secondaire (fille), cration de certificats X509 serveur et individuels, configuration de ApacheSSL.

Environnement de travail :
Machine UNIX (Linux) Disponibilit dun accs Internet. Apache (2.x) install depuis une distribution source originale OpenSSL (version 0.9.6g ou plus)

Droulement :
TP Guid

Tp-ssl-v1.01.doc

1 / 22

27/01/2003

Travaux pratique - SSL

Objectifs : ............................................................................................................................................................ 1 Environnement de travail : ................................................................................................................................ 1 Droulement :...................................................................................................................................................... 1 1 2 3 Prsentation ................................................................................................................................................. 3 Prise en main dopenSSL ............................................................................................................................ 3 Cration des autorits de certification ....................................................................................................... 4 3.1 Cration de lautorit racine ............................................................................................................... 5 3.1.1 Construction de la cl prive ........................................................................................................... 5 3.1.2 A propos de la cl prive................................................................................................................. 5 3.1.3 Autosignature du CA....................................................................................................................... 6 3.1.4 Dtails de notre CA ......................................................................................................................... 7 3.1.5 Rangement de nos cls .................................................................................................................... 7 3.2 Cration de lautorit fille ................................................................................................................... 8 3.2.1 Cration du Certificat Signing Request (CSR)................................................................................ 8 3.2.2 Signature de la requte CSR............................................................................................................ 9 3.2.3 Dtail de notre certificat CA INRIA-RHONEALPES .................................................................. 12 3.2.4 Rangement de notre certificat........................................................................................................ 12 4 Certificats serveurs et utilisateurs............................................................................................................ 13 4.1 4.2 4.3 5 Cration dun certificat serveur......................................................................................................... 13 Vrification dun certificat................................................................................................................. 16 Cration de certificats utilisateurs..................................................................................................... 17

Formats et packaging des certificats et cls............................................................................................. 19 5.1 5.2 Format de diffusion des certificats..................................................................................................... 19 Packaging des couples de cls (certificat+cls prive) ..................................................................... 19

Configuration de ApacheSSL ................................................................................................................... 20 6.1 6.2 Section globale................................................................................................................................... 20 Virtual Host SSL ................................................................................................................................ 21

Tp-ssl-v1.01.doc

2 / 22

27/01/2003

Travaux pratique - SSL

1 Prsentation
A travers ce TP, nous allons : mettre en place une autorit de certification principale crer une autorit de certification fille mettre des certificats serveurs mettre des certificats utilisateurs configurer un serveur Apache, utilisant ceux-ci Remarque : Nous faisons abstraction ici de la problmatique IGC et de la composante organisationnelle et politique quelle implique. Cette dimension est sans aucun doute la plus critique, et dans le monde relle, celle qui devra ncessiter le plus dattention

2 Prise en main dopenSSL


Version dopenSSL :
openssl version OpenSSL 0.9.6g [engine] 9 Aug 2002

Aide dopenssl :
man openssl openssl help openssl genrsa help man genrsa

etc.
# openssl help openssl:Error: 'help' is an invalid command. Standard commands asn1parse ca dgst dh enc errstr nseq passwd rand req s_server s_time spkac verify ciphers dhparam gendh pkcs12 rsa sess_id version crl dsa gendsa pkcs7 rsautl smime x509 crl2pkcs7 dsaparam genrsa pkcs8 s_client speed

Message Digest commands (see the `dgst' command for more details) md2 md4 md5 mdc2 rmd160 sha sha1 Cipher commands (see the `enc' command for more details) base64 bf bf-cbc bf-cfb bf-ofb cast cast-cbc cast5-cbc cast5-ecb cast5-ofb des des-cbc des-ecb des-ede des-ede-cbc des-ede-cfb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb des3 desx idea idea-cbc idea-ecb idea-ofb rc2 rc2-40-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4-40 rc5 rc5-cbc rc5-cfb rc5-ofb bf-ecb cast5-cfb des-cfb des-ede-ofb des-ofb idea-cfb rc2-64-cbc rc4 rc5-ecb

Tp-ssl-v1.01.doc

3 / 22

27/01/2003

Travaux pratique - SSL

3 Cration des autorits de certification


Nous allons crer 2 CA : Autorit de certification INRIA Qui sera lautorit de certification mre, auto signe. Ce sera le CA de lorganisation INRIA. Son rle sera de signer des autorits fille, pour chacune des Units de Recherche, permettant ainsi une dlgation dans ltablissement des certificats au sein de chaque UR. Des autorits filles pourront galement tre cres pour des projets ponctuels, permettant ainsi de sparer et structurer au mieux les espaces de confiances. Autorit de certification fille INRIA-RHONEALPES CA fille, signe par le CA INRIA , qui sera utilise au sein de lUnit de Recherche Rhne-Alpes, pour la signature des certificats des serveurs et des personnes de lUR. Chaque zone de confiance sera ainsi adapte lchelle du cercle de connaissance et de confiance de la personne en charge des autorits filles.

Tp-ssl-v1.01.doc

4 / 22

27/01/2003

Travaux pratique - SSL

3.1 Cration de lautorit racine


3.1.1 Construction de la cl prive
Nous allons crer un jeu de cls publique/prive (rsa), protges par un chiffrement symtrique de type triple DES :
# openssl genrsa -des3 -out ca-inria.key 1024 Generating RSA private key, 1024 bit long modulus .......................................................++++++ ..++++++ e is 65537 (0x10001) Enter PEM pass phrase: xxxxxxxxxxxxx Verifying password - Enter PEM pass phrase: xxxxxxxxxxxxx # ls -l ca-inria.key -rw-r--r-1 root root 951 Oct 7 17:48 ca-inria.key

3.1.2 A propos de la cl prive..


Histoire dtre curieux, observons cette cls prive :
# openssl rsa -in ca-inria.key -noout -text read RSA key Enter PEM pass phrase: Private-Key: (1024 bit) modulus: 00:9c:ab:ba:0a:46:d3:9f:dd:e8:8f:2c:10:e2:17: () 78:45:a9:16:4c:86:c6:c4:0d publicExponent: 65537 (0x10001) privateExponent: 4b:c5:82:24:96:3c:a3:84:df:84:de:fb:0b:5d:d8: a0:2f:3b:08:53:8b:34:01 prime1: 00:cb:89:f7:37:f0:9b:63:b3:83:9d:af:8f:01:0b: cd:b2:3e:0e:5d prime2: 00:c5:0d:47:6d:f0:e3:49:b4:0f:f0:40:23:c0:18: 8e:fe:c3:51:71 exponent1: 7d:80:72:99:61:98:ce:df:2f:b6:99:3b:9a:2f:11: 31:4d:a6:59 exponent2: 72:49:e8:62:f8:b3:2b:1d:57:9d:35:e6:46:55:3d: 72:1b:e0:d1 coefficient: 44:74:a2:47:a1:3e:ec:e8:67:f9:bc:f2:b3:4c:98: 05:dd:0b:9a

() () () () () ()

Tp-ssl-v1.01.doc

5 / 22

27/01/2003

Travaux pratique - SSL En fait, cette clef prive contient les lments suivants : Cl publique : Modulus PublicExponent Cl prive : Modulus : PrivateExponent est le modulo n est lexposant public e (chiffrement) est le modulo n est lexposant priv d (dchiffrement)

Les autres lments sont destins faciliter les calculs (et sont privs) : Prime1 est le nombre premier p Prime2 est le nombre premier q (n=p.q) Exponent1 est d mod (p-1) Exponent2 est d mod (q-1) Coefficient est (q-1) mod p (Chinese Remainder Theorem coefficient)

3.1.3 Autosignature du CA
Nous allons maintenant signer nore CA
# openssl req -new -x509 -days 365 -key ca-inria.key -out ca-inria.crt
Using configuration from /usr/local/openssl-0.9.6g/ssl/openssl.cnf Enter PEM pass phrase: xxxxxxxxx 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]:. Locality Name (eg, city) []:. Organization Name (eg, company) [Internet Widgits Pty Ltd]:INRIA Organizational Unit Name (eg, section) []:. Common Name (eg, YOUR name) []:INRIA Email Address []:. #

Nous avons fait le choix de crer une structure trs classique de type : C=FR, O=INRIA, CN=INRIA Remarque : On remarque les valeurs . , destins pour ne pas qualifier certains champs.
# ls -l ca-inria.crt -rw-r--r-1 root #

root

875 Oct

7 17:52 ca-inria.crt

Tp-ssl-v1.01.doc

6 / 22

27/01/2003

Travaux pratique - SSL

3.1.4 Dtails de notre CA


# openssl x509 -in ca-inria.crt -noout subject subject= /C=FR/O=INRIA/CN=INRIA # openssl x509 -in ca-inria.crt -noout text
Certificate: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=FR, O=INRIA, CN=INRIA Validity Not Before: Oct 7 15:52:05 2002 GMT Not After : Oct 7 15:52:05 2003 GMT Subject: C=FR, O=INRIA, CN=INRIA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:9c:ab:ba:0a:46:d3:9f:dd:e8:8f:2c:10:e2:17: () 78:45:a9:16:4c:86:c6:c4:0d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 7C:6B:EA:E8:43:EF:76:A8:25:04:7F:E1:5E:69:B9:C4:32:B0:C6:FC X509v3 Authority Key Identifier: keyid:7C:6B:EA:E8:43:EF:76:A8:25:04:7F:E1:5E:69:B9:C4:32:B0:C6:FC DirName:/C=FR/O=INRIA/CN=INRIA serial:00 X509v3 Basic Constraints: CA:TRUE Signature Algorithm: md5WithRSAEncryption 9b:01:6d:99:7a:82:20:e3:53:84:ea:c7:81:f9:0b:42:17:93: () 92:60

3.1.5 Rangement de nos cls


Est-il besoin de prciser qutre ordonn est indispensable ;-)
# mkdir CA-inria # mv ca-inria.crt CA-inria # mv ca-inria.key CA-inria #

Questions : Que reprsentent les .+++++ dans la gnration des clefs ? Pourquoi le PublicExponent est-il toujours 65537 (0x10001) ? Que pensez-vous du dn choisi pour notre racine : C=FR, O=INRIA, CN=INRIA ? Quel intrt a-t-on crer un niveau de CA INRIA ?

Tp-ssl-v1.01.doc

7 / 22

27/01/2003

Travaux pratique - SSL

3.2 Cration de lautorit fille


La cration dun certificat sign par une autorit de confiance se fera en deux tapes : Prparation du certificat (cration dune requte en signature, ou CSR) Signature de la requte

3.2.1 Cration du Certificat Signing Request (CSR)


La procdure est toujours la mme
# openssl genrsa -des3 -out ca-inria-rhoneAlpes.key 1024 Generating RSA private key, 1024 bit long modulus .........++++++ ...........++++++ e is 65537 (0x10001) Enter PEM pass phrase: xxxxxxx Verifying password - Enter PEM pass phrase: xxxxxxx # # openssl req -new -key ca-inria-rhoneAlpes.key -out ca-inria-rhoneAlpes.csr
Using configuration from /usr/local/openssl-0.9.6g/ssl/openssl.cnf 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]:. Locality Name (eg, city) []:. Organization Name (eg, company) [Internet Widgits Pty Ltd]:INRIA Organizational Unit Name (eg, section) []:. Common Name (eg, YOUR name) []:INRIA-RHONEALPES Email Address []:. Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:. An optional company name []:Inria Rhone-Alpes #

Nous avons fait le choix de la structure suivante : C=FR,O=INRIA,CN=INRIA-RHONEALPES Qui permet de bien montrer la structure de notre organisation : Ce certificat est celui de lentit INRIA-RHONEALPES, qui est une entit de lorganisation INRIA.

Tp-ssl-v1.01.doc

8 / 22

27/01/2003

Travaux pratique - SSL Remarque : Il est possible de gnrer le couple de clefs au moment de la gnration du CSR et non lors dune tape pralable comme nous lavons fait.

3.2.2 Signature de la requte CSR


L, a devient plus complexe Pour effectuer une signature, openssl besoin dune configuration spcifique. Cette configuration est typiquement fournie dans un fichier de paramtre et non dans la ligne de commande do la ncessit dutiliser un petit script, tel que celui que nous utilisons ici Ceci est galement rendu indispensable par la ncessit de grer des numros de srie et donc une table dindexation des cerificats signs. Cest ce que fait le script que nous allons utiliser. Ce script est adapt de sign.sh, diffus avec la distribution openssl. (dbut du script sign-ca-inria.sh )
#!/bin/sh ## ## sign.sh -- Sign a SSL Certificate Request (CSR) ## Copyright (c) 1998-1999 Ralf S. Engelschall, All Rights Reserved. ## # argument line handling CSR=$1 # ===================================== Debut de configuration ==== # CA_DIR=/data/tmp/tp-ssl/CA-inria CA_CRT=$CA_DIR/ca-inria.crt CA_KEY=$CA_DIR/ca-inria.key # # ===================================== Fin de configuration ======

CA_DIR CA_CRT CA_KEY

est le dossier de notre CA. Nous avions opt pour une structure o chaque CA est range dans un dossier spar. Certificat du CA signataire Clef prive du CA signataire

Dans cette version modifie, seule ces 3 lignes ont besoin dtre adapte au CA. Le reste est gnrique.
if [ $# -ne 1 ]; then echo "Usage: sign.sign <whatever>.csr"; exit 1 fi if [ ! -f $CSR ]; then echo "CSR not found: $CSR"; exit 1 fi case $CSR in *.csr ) CERT="`echo $CSR | sed -e 's/\.csr/.crt/'`" ;; * ) CERT="$CSR.crt" ;; esac # make sure environment exists if [ ! -d $CA_DIR/ca.db.certs ]; then mkdir $CA_DIR/ca.db.certs

Tp-ssl-v1.01.doc

9 / 22

27/01/2003

Travaux pratique - SSL


fi if [ ! -f $CA_DIR/ca.db.serial ]; then echo '01' >$CA_DIR/ca.db.serial fi if [ ! -f $CA_DIR/ca.db.index ]; then cp /dev/null $CA_DIR/ca.db.index fi # create an own SSLeay config cat >ca.config <<EOT [ ca ] default_ca = CA_own [ CA_own ] dir = $CA_DIR certs = $CA_DIR new_certs_dir = $CA_DIR/ca.db.certs database = $CA_DIR/ca.db.index serial = $CA_DIR/ca.db.serial RANDFILE = $CA_DIR/ca.db.rand certificate = $CA_CRT private_key = $CA_KEY default_days = 365 default_crl_days = 30 default_md = md5 preserve = no policy = policy_anything [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional [ v3_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer:always basicConstraints = CA:true EOT

Remarque : il est possible de profiler les champs demands au moment de la signature.


# sign the certificate echo "CA signing: $CSR -> $CERT:" openssl ca -config ca.config -extensions v3_ca -out $CERT -infiles $CSR echo "CA verifying: $CERT <-> CA cert" openssl verify -CAfile $CA_CRT $CERT # cleanup after SSLeay #rm -f ca.config rm -f $CA_DIR/ca.db.serial.old rm -f $CA_DIR/ca.db.index.old # die gracefully exit 0

(fin du script sign-ca-inria.sh )

Tp-ssl-v1.01.doc

10 / 22

27/01/2003

Travaux pratique - SSL Bon maintenant signons notre requte CSR :


# ./sign-ca-inria.sh ca-inria-rhoneAlpes.csr
CA signing: ca-inria-rhoneAlpes.csr -> ca-inria-rhoneAlpes.crt: Using configuration from ca.config Enter PEM pass phrase: Check that the request matches the signature Signature ok The Subjects Distinguished Name is as follows countryName :PRINTABLE:'FR' organizationName :PRINTABLE:'INRIA' commonName :PRINTABLE:'INRIA-RHONEALPES' Certificate is to be certified until Oct 7 16:16:12 2003 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 CA verifying: ca-inria-rhoneAlpes.crt <-> CA cert ca-inria-rhoneAlpes.crt: OK

La requte nous est prsente pour signature, puis la confirmation denregistrement nous est demande. La validit de notre certificat est contrle par le script.
# ls -l
total 112 drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r-3 1 1 1 1 1 root root root root root root root root root root root root 4096 2306 631 963 1916 2306 Oct Oct Oct Oct Oct Oct 7 7 7 7 7 7 18:16 18:16 18:04 18:04 17:45 18:16 CA-inria ca-inria-rhoneAlpes.crt ca-inria-rhoneAlpes.csr ca-inria-rhoneAlpes.key sign-ca-inria.sh ca.config

Tp-ssl-v1.01.doc

11 / 22

27/01/2003

Travaux pratique - SSL

3.2.3 Dtail de notre certificat CA INRIA-RHONEALPES


[root@haha CA.crt]# openssl x509 -in ca-inria-rhoneAlpes.crt -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=FR, O=INRIA, CN=INRIA Validity Not Before: Oct 11 13:54:10 2002 GMT Not After : Oct 11 13:54:10 2003 GMT Subject: C=FR, O=INRIA, CN=INRIA-RHONEALPES Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c4:41:f2:8c:3f:3d:bf:ba:ad:b4:a3:7e:ce:1c: () a2:db:ea:cc:82:bb:88:ab:18:d9:c7:c7:63:21:f2: 8f:f1:6a:80:3a:f8:86:23:f9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 24:D5:88:9B:42:13:0D:4B:D6:A5:44:9F:46:25:98:55:13:BD:42:C0 X509v3 Authority Key Identifier: keyid:7C:6B:EA:E8:43:EF:76:A8:25:04:7F:E1:5E:69:B9:C4:32:B0:C6:FC DirName:/C=FR/O=INRIA/CN=INRIA serial:00 X509v3 Basic Constraints: CA:TRUE Signature Algorithm: md5WithRSAEncryption 59:fb:d0:26:a6:a9:9e:14:e0:e3:ba:9c:80:44:a0:11:92:95: () 32:f3:05:d1:9f:e7:e8:a0:bb:f0:00:aa:0a:66:fa:7d:04:3e: ee:82 [root@haha CA.crt]# [root@haha CA.crt]#

3.2.4 Rangement de notre certificat


# mkdir CA-inria-rhoneAlpes # mv ca-inria-rhoneAlpes.crt CA-inria-rhoneAlpes # mv ca-inria-rhoneAlpes.key CA-inria-rhoneAlpes

Question : A quoi puis-je voir quun certificat est auto sign ou non ? A quoi sert le numro de srie ? Ai-je besoin de conserver les Certificat Signing Request ? Comment puis-je modifier la date dexpiration de mes certificats ? Quelle est la signification du champ X509v3 Basic Constraints ?

Tp-ssl-v1.01.doc

12 / 22

27/01/2003

Travaux pratique - SSL

4 Certificats serveurs et utilisateurs


4.1 Cration dun certificat serveur
# openssl genrsa -des3 -out drsi-interne.key 1024
Generating RSA private key, 1024 bit long modulus ...++++++ ................................................................................. ..............++++++ e is 65537 (0x10001) Enter PEM pass phrase: xxxxxxx Verifying password - Enter PEM pass phrase: xxxxxxx

# ls -l drsi-interne.key
-rw-r--r-1 root

root

963 Oct

7 18:24 drsi-interne.key

# openssl req -new -key drsi-interne.key -out drsi-interne.csr


Using configuration from /usr/local/openssl-0.9.6g/ssl/openssl.cnf Enter PEM pass phrase: xxxxxxx ----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]:. Locality Name (eg, city) []:. Organization Name (eg, company) [Internet Widgits Pty Ltd]:INRIA Organizational Unit Name (eg, section) []:INRIA-RHONEALPES Common Name (eg, YOUR name) []:drsi-interne.inrialpes.fr Email Address []:. Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:. An optional company name []:.

Nous avons choisi la structure suivante : C=FR, O=INRIA, OU=INRIA-RHONEALPES, CN=drsi-interne.inria.fr Cette structure est cense reflter aussi fidlement que possible la structure de notre organisation. Une organisation peu avoir plusieurs dimensions ou vues : Dimension topologique ou gographique (drsi-interne est un serveur de lespace Inria-RhoneAlpes) Organisationnelle Hirarchique Propre lun ou lautre des processus, lesquels sont souvent transversaux Le choix de la structure, unique, ne pourra donc tre que lune des reprsentations de notre organisation. De ce fait cette structure ne pourra tre suffisante pour tre le support de la gestion de lhabilitation. Le Qui peut faire quoi ne peut donc tre dfini sur ce seul critre. La structure est finalement peut importante, car de toute faon trop limite.

Tp-ssl-v1.01.doc

13 / 22

27/01/2003

Travaux pratique - SSL

La vocation dun certificat est lauthentification. Vouloir intgrer au sein de celui-ci des critres dhabilitation est une mauvaise approche (rductrice, inadapte). Pour visualiser la structure de notre requte :
# openssl req -in drsi-interne.csr
Certificate: Data: Version: 3 (0x2) Serial Number: 4 (0x4) Signature Algorithm: md5WithRSAEncryption Issuer: C=FR, O=INRIA, CN=INRIA-RHONEALPES Validity Not Before: Oct 11 15:18:46 2002 GMT Not After : Oct 11 15:18:46 2003 GMT Subject: C=FR, O=INRIA, CN=drsi-interne.inrialpes.fr Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b4:93:71:64:37:c2:40:c6:5b:80:72:51:0f:da: () a6:55:8d:ff:1a:e1:ee:24:62:d0:68:00:8e:77:59: 0b:19:39:a5:2f:ab:e2:62:c9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment Signature Algorithm: md5WithRSAEncryption 09:26:95:6b:2a:7d:71:e1:8f:1e:1e:c8:8f:07:8b:70:b9:1f:() 23:3d:b7:45:6c:ae:0b:e5:7d:27:d1:67:88:68:30:c1:22:41: 4f:69 #

-noout -text

La signature de notre requte se fera suivant le mme principe, via un script proche de notre script prcdent. Les rpertoires utiliss seront spcifiques :

CA_DIR=/data/tmp/tp-ssl/CA-inria-rhoneAlpes CA_PATH=/data/tmp/tp-ssl/CA.crt CA_CRT=$CA_DIR/ca-inria-rhoneAlpes.crt CA_KEY=$CA_DIR/ca-inria-rhoneAlpes.key

Les extensions SSLv3 spcifiques notre certificat serveur seront intgres :

[ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment

Lappel openssl sera alors le suivant :


openssl ca -config ca.config -extensions v3_req -out $CERT -infiles $CSR

Tp-ssl-v1.01.doc

14 / 22

27/01/2003

Travaux pratique - SSL La signature effective de notre requte se fera de la manire suivante :
# ./sign-ca-inria-rhoneAlpes.sh drsi-interne.csr
CA signing: drsi-interne.csr -> drsi-interne.crt: Using configuration from ca.config Enter PEM pass phrase: Check that the request matches the signature Signature ok The Subjects Distinguished Name is as follows countryName :PRINTABLE:'FR' organizationName :PRINTABLE:'INRIA' commonName :PRINTABLE:'drsi-interne.inrialpes.fr' Certificate is to be certified until Oct 7 16:40:22 2003 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 CA verifying: drsi-interne.crt <-> CA cert drsi-interne.crt: /C=FR/O=INRIA/CN=INRIA-RHONEALPES error 2 at 1 depth lookup:unable to get issuer certificate

Question : Pourquoi la vrification t-elle produit une erreur ? Comment modifier notre requte pour vrifier correctement notre certificat ?

Tp-ssl-v1.01.doc

15 / 22

27/01/2003

Travaux pratique - SSL

4.2 Vrification dun certificat


Openssl permet bien videmment de vrifier la validit dun certificat
# openssl verify help
usage: verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [engine e] cert1 cert2 ... recognized usages: sslclient SSL client sslserver SSL server nssslserver Netscape SSL server smimesign S/MIME signing smimeencrypt S/MIME encryption crlsign CRL signing any Any Purpose

# # openssl verify -CAfile CA-inria/ca-inria.crt \


CA-inria-rhoneAlpes/ca-inria-rhoneAlpes.crt

CA-inria-rhoneAlpes/ca-inria-rhoneAlpes.crt: OK # # openssl verify -CAfile CA-inria-rhoneAlpes/ca-inria-rhoneAlpes.crt


drsi-interne.crt drsi-interne.crt: /C=FR/O=INRIA/CN=INRIA-RHONEALPES error 2 at 1 depth lookup:unable to get issuer certificate

Il est impossible de vrifier la chane de certification en entier, puisque la validit du certificat ca-inria-rhonealpes ne peut tre vrifie. Il est donc ncessaire de fournir la totalit des lments de la chane de certification Le principe tant de disposer lensemble des certificats des CA dans un mme dossier avec un jeu de liens symboliques pour permettre un accs rapide ceux-ci, via une hash value. Les liens sont du genre : 497a4f0f.0 -> ca-inria.crt
# mkdir CA.crt # cp CA-inria/ca-inria.crt CA.crt # cp CA-inria-rhoneAlpes/ca-inria-rhoneAlpes.crt CA.crt # # ls -lt CA.crt total 8 -rw-r--r-1 root root 2306 Oct 7 18:44 ca-inria-rhoneAlpes.crt -rw-r--r-1 root root 875 Oct 7 18:44 ca-inria.crt # # cd CA.crt [CA.crt]# openssl x509 -hash -in ca-inria.crt -noout 497a4f0f

La valeur hache de notre certificat est 497a4f0f, do le lien dindex :


[CA.crt]# ln -s ca-inria.crt 497a4f0f.0 [CA.crt]# ls l total 8 lrwxrwxrwx 1 root root 12 Oct -rw-r--r-1 root root 875 Oct

7 18:50 497a4f0f -> ca-inria.crt 7 18:44 ca-inria.crt

Remarque : Le nom de lindex doit tre : <hash value>.0 (ne pas oublier le .0)

Tp-ssl-v1.01.doc

16 / 22

27/01/2003

Travaux pratique - SSL

[CA.crt]# openssl x509 -hash -in ca-inria-rhoneAlpes.crt -noout cedc8522 [CA.crt]# ln -s ca-inria-rhoneAlpes.crt cedc8522.0 [CA.crt]# [CA.crt]# ls -l
total 8 lrwxrwxrwx -rw-r--r--rw-r--r-lrwxrwxrwx () () () () 12 875 2306 23 Oct Oct Oct Oct 7 7 7 7 18:50 18:44 18:44 18:51 497a4f0f.0 -> ca-inria.crt ca-inria.crt ca-inria-rhoneAlpes.crt cedc8522.0 -> ca-inria-rhoneAlpes.crt

[CA.crt]# [CA.crt]# cd .. #

Vrification avec la chane complte de certification


# openssl verify -CApath ./CA.crt drsi-interne.crt drsi-interne.crt: OK

Nous pouvons donc maintenant ranger notre certificat (et sa clef secrte)
# mkdir CERT-server # mv drsi-interne.crt CERT-server # mv drsi-interne.key CERT-server

4.3 Cration de certificats utilisateurs


Nous allons recommencer notre procdure de cration de certificats mais pour des utilisateurs, cette fois. La procdure sera identique la cration des certificats serveurs.
# openssl req -new -out Bob.Watson.csr
Using configuration from /usr/local/openssl-0.9.6g/ssl/openssl.cnf Generating a 1024 bit RSA private key INRIA-RHONEALPES ....++++++ .++++++ writing new private key to 'privkey.pem' Enter PEM pass phrase: Verifying password - 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]:. Locality Name (eg, city) []:. Organization Name (eg, company) [Internet Widgits Pty Ltd]:INRIA Organizational Unit Name (eg, section) []:. Common Name (eg, YOUR name) []:Bob Watson Email Address []:bob.watson@inrialpes.fr Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:. An optional company name []:.

Tp-ssl-v1.01.doc

17 / 22

27/01/2003

Travaux pratique - SSL Puis nous signons notre requte :


# ./sign-ca-inria-rhoneAlpes.sh Bob.Watson.csr CA signing: Bob.Watson.csr -> Bob.Watson.crt: Using configuration from ca.config Enter PEM pass phrase: xxxxx Check that the request matches the signature Signature ok The Subjects Distinguished Name is as follows countryName :PRINTABLE:'FR' organizationName :PRINTABLE:'INRIA' organizationalUnitName:PRINTABLE:'INRIA-RHONEALPES' commonName :PRINTABLE:'Bob Watson' emailAddress :IA5STRING:'bob.watson@inrialpes.fr' Certificate is to be certified until Oct 7 17:09:00 2003 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 CA verifying: Bob.Watson.crt <-> CA cert Bob.Watson.crt: OK

Notre certificat utilisateur est sign et vrifi. Nous pouvons le regarder en dtail :
# openssl x509 -in Bob.Watson.crt -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 3 (0x3) Signature Algorithm: md5WithRSAEncryption Issuer: C=FR, O=INRIA, CN=INRIA-RHONEALPES Validity Not Before: Oct 11 15:09:27 2002 GMT Not After : Oct 11 15:09:27 2003 GMT Subject: C=FR, O=INRIA, OU=INRIA-RHONEALPES, CN=Bob Watson/Email=bob.watson@inria.fr Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c9:d5:34:26:f8:37:1f:82:8c:bf:d7:aa:6a:04: () 01:4e:42:19:9b:04:69:3a:43:68:d2:9b:fe:72:ab: c5:b3:29:3f:b4:f5:37:64:f9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Key Usage: Digital Signature, Non Repudiation, Key Encipherment Signature Algorithm: md5WithRSAEncryption b7:a8:1f:61:7f:2b:db:35:a5:32:21:0c:11:67:00:e2:8f:67: () fd:a7:4d:ee:e0:c2:06:56:ba:8f:dd:90:2f:41:be:3e:01:ba: 3b:63

Tp-ssl-v1.01.doc

18 / 22

27/01/2003

Travaux pratique - SSL

5 Formats et packaging des certificats et cls


5.1 Format de diffusion des certificats
Les certificats des CA doivent tre incorpors dans les browsers (pour vrifier les certificats serveurs) et dans les serveurs (pour vrifier les certificats utilisateurs). Le format usuel, permettant une importation aise de ces certificats X509 est le format pem, utilis de manire standard par openssl. Lextension qui plait bien windoze est .crt Attention : openssl est susceptible dajouter une description texte dans les output si on ne fait pas attention (ie si on met une option text en trop) Un certificat X509, en format pem ressemble :
# cat Bob.Watson.crt -----BEGIN CERTIFICATE----MIICOTCCAaKgAwIBAgIBAzANBgkqhkiG9w0BAQQFADA4MQswCQYDVQQGEwJGUjEO MAwGA1UEChMFSU5SSUExGTAXBgNVBAMTEElOUklBLVJIT05FQUxQRVMwHhcNMDIx MDExMTUwOTI3WhcNMDMxMDExMTUwOTI3WjBxMQswCQYDVQQGEwJGUjEOMAwGA1UE ChMFSU5SSUExGTAXBgNVBAsTEElOUklBLVJIT05FQUxQRVMxEzARBgNVBAMTCkJv YiBXYXRzb24xIjAgBgkqhkiG9w0BCQEWE2JvYi53YXRzb25AaW5yaWEuZnIwgZ8w DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMnVNCb4Nx+CjL/XqmoE+LxsI2b24x27 3lTXC0bw9ytgappSjbWgxlise9VSRx2ut1GYInnflGyphJi8Er6tnnw/QxTWlUX3 +WNIKyvaXwFugD4TMlajAjX+wMYcEJkzA9HjAHZ8IqAqAU5CGZsEaTpDaNKb/nKr xbMpP7T1N2T5AgMBAAGjGjAYMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgXgMA0GCSqG SIb3DQEBBAUAA4GBALeoH2F/K9s1pTIhDBFnAOKPZzjD+CZ5P3+avXoYsJh1zqgc /bURtWFcsT3DWL3MeeSB/4y+REJBAjIZ306f2H0Fet5HO1UirsIPeBOL314We8kZ p2QNQzPDXwBlgx8T2w+D5udWQNi9YgUIiP2nTe7gwgZWuo/dkC9Bvj4Bujtj -----END CERTIFICATE-----

Les serveurs Apache utiliseront le mme systme quopenssl pour la vrification des chanes de certifications, savoir un rpertoire contenant lensemble des certificats de CA, indexs via une fonction de hachage (identique=simple recopie ;-)

5.2 Packaging des couples de cls (certificat+cls prive)


Comment archiver/importer un couple de cls ? Cela se fera via un format darchive pkcs12, que lon peut construire facilement via openssl :
# openssl pkcs12 -inkey Bob.Watson.key -in Bob.Watson.crt -export >Bob.Watson.p12

Remarque : Lextension p12 est reconnue par Windows Remarque ; Une structure pkcs12 peut galement intgrer la chane de certification, laquelle sera intgre avec un succs variables par les browsers

Tp-ssl-v1.01.doc

19 / 22

27/01/2003

Travaux pratique - SSL

6 Configuration de ApacheSSL
Nous allons crer un serveur virtuel. La configuration de toute la partie ssl de notre serveur Apache sera dfinie dans un fichier spar, qui ne sera inclus que lors dun dmarrage de notre serveur en mode ssl (startssl) Dans notre httpd.conf, nous allons inclure les directives dinclusion conditionnelle :
<IfDefine SSL> Include conf/ssl-configuration.conf </IfDefine>

Notre fichier ssl-configuration.conf comporte les directives suivantes :

6.1 Section globale


Cette partie est commune lensemble des serveurs virtuels ssl :
# When we also provide SSL we have to listen to the # standard HTTP port (see above) and to the HTTPS port # Listen 443

Indique au serveur Apache dcouter le port 443. En cas de plusieurs serveurs virtuels, ceux-ci doivent tre sur des ports diffrents.
# Some MIME-types for downloading Certificates and CRLs # AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl

Les certificats de CA et les listes de rvocations doivent pouvoir tre diffuses.


# Pass Phrase Dialog: # Configure the pass phrase gathering process. # The filtering dialog program (`builtin' is a internal # terminal dialog) has to provide the pass phrase on stdout. SSLPassPhraseDialog builtin

Apache doit pouvoir accder la cl prive de ses serveurs ssl. Si ces cls prives sont protges par des passphrases, ceux-ci seront demands. Cette directive permet de remplacer cette saisie manuelle par lexcution dun programme donn, qui enverra dans son stdout la passphrase en question.
# Inter-Process Session Cache: # Configure the SSL Session Cache: First the mechanism # to use and second the expiring timeout (in seconds). SSLSessionCache none

Utilisation ou non du cache ssl.

Tp-ssl-v1.01.doc

20 / 22

27/01/2003

Travaux pratique - SSL

# Semaphore: # Configure the path to the mutual exclusion semaphore the # SSL engine uses internally for inter-process synchronization. SSLMutex file:logs/ssl_mutex

Mcanisme de synchronisation inter-process


# Pseudo Random Number Generator (PRNG): # SSLRandomSeed startup builtin SSLRandomSeed connect builtin

Mcanisme de gnration des nombres alatoires. La qualit des nombres (pseudo)alatoires est un lment critique de la scurit.

6.2 Virtual Host SSL


<VirtualHost drsi-interne.inrialpes.fr:443> ServerName DocumentRoot ServerAdmin drsi-interne.inrialpes.fr:443 "/data/web/sites/drsi-interne.inrialpes.fr-SSL/htdocs" Jean-Luc.Parouty@inria.fr

ErrorLog "/var/log/apache/drsi-interne.inrialpes.fr-SSL/errorlog.txt" CustomLog "/var/log/apache/drsi-interne.inrialpes.fr-SSL/accesslog.txt" common

Paramtres standards tout serveur virtuel


SSLEngine on

Mise en uvre de la couche ssl


SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

Choix (cots serveur) des algorithmes de chiffrement.


# --- Server Certificate: SSLCertificateFile /data/tmp/tp-ssl/CERT-server/drsi-interne.crt # --- Server Private Key: SSLCertificateKeyFile /data/tmp/tp-ssl/CERT-server/drsi-interne.key

Certificat et cl prive du serveur


# Server Certificate Chain: # Point SSLCertificateChainFile at a file containing the # concatenation of PEM encoded CA certificates which form the # certificate chain for the server certificate. Alternatively # the referenced file can be the same as SSLCertificateFile # when the CA certificates are directly appended to the server # certificate for convinience. SSLCertificateChainFile /data/tmp/tp-ssl/CA.crt/all-ca.crt

Chane de certification du serveur (concatnation des CA)


# Certificate Authority (CA): SSLCACertificatePath /data/tmp/tp-ssl/CA.crt

Dossier des CA reconnus, indexs comme vu prcdemment (cf. 4.2)

Tp-ssl-v1.01.doc

21 / 22

27/01/2003

Travaux pratique - SSL

# Certificate Revocation Lists (CRL): #SSLCARevocationPath /usr/local/apache2/conf/ssl.crl #SSLCARevocationFile /usr/local/apache2/conf/ssl.crl/ca-bundle.crl

Liste de rvocation. (non utilise dans cet exemple)


# Client Authentication (Type): SSLVerifyClient require SSLVerifyDepth 5

Politique dauthentification : none : authentification utilisateur non demande optional : optionnelle require : requise
<Directory /data/web/sites/drsi-interne.inrialpes.fr-SSL> Options all AllowOverride None SSLOptions +StdEnvVars Order deny,allow Allow from 194.199.19.0/24 Deny from all </Directory> <Files ~ "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </Files> <Directory "/usr/local/apache2/cgi-bin"> SSLOptions +StdEnvVars </Directory>

La directive SSLOptions +StdEnvVars permet de diffuser les paramtres dauthentifications (du certificat utilisateur) aux excutables de type cgi
# SSL Protocol Adjustments: # (...) SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0

Quelques petits correctifs, permettant de corriger de menus bugs Et quelques logs, spcifiques SSL
# Per-Server Logging: # The home of a custom SSL log file. Use this when you want a # compact non-error SSL logfile on a virtual host basis. CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>

Fin dela configuration de notre serveur virtuel a marche ??

Tp-ssl-v1.01.doc

22 / 22

27/01/2003