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
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
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
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
Tp-ssl-v1.01.doc
4 / 22
27/01/2003
() () () () () ()
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
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
----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.
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
Tp-ssl-v1.01.doc
10 / 22
27/01/2003
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
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
# ls -l drsi-interne.key
-rw-r--r-1 root
root
963 Oct
7 18:24 drsi-interne.key
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
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 :
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
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
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
[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 .. #
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
Tp-ssl-v1.01.doc
17 / 22
27/01/2003
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
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 ;-)
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
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>
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
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
Tp-ssl-v1.01.doc
20 / 22
27/01/2003
# 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 gnration des nombres alatoires. La qualit des nombres (pseudo)alatoires est un lment critique de la scurit.
Tp-ssl-v1.01.doc
21 / 22
27/01/2003
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>
Tp-ssl-v1.01.doc
22 / 22
27/01/2003