Vous êtes sur la page 1sur 82

Services Web

Grer un serveur web (OpenSSL)

Plan

Protocole SSL
Serveur Web scuris
Cration de certificat
Configuration Apache

Le protocole SSL

Principes du protocole SSL

Conu par Netscape,SSL est un protocole


se plaant entre la couche application et
la couche transportpermettant d'assurer la
confidentialit, l'authentification et l'intgrit
des donnes lors des communications.

Le protocole SSL

Il peut tre appliqu des applications


comme HTTP, POP, FTP,...

Sous Linux, consulter le fichier /etc/services


pour connatre les numros de port
correspondants aux nouvelles implmentation
de ces services au dessus de SSL.

Le protocole SSL

Exemple de fonctionnement du protocole


SSL avec un serveur WEB

En ce qui concerne le HTTP, il a t ncessaire


de dfinir une nouvelle mthode d'accs dans
les URL baptise HTTPS pour se connecter au
port d'un serveur utilisant le SSL qui porte par
dfaut le numro 443.

Le protocole SSL

Le mcanisme est illustr par la figure


suivante :
HTTP over SSL

1 - le navigateur fait une demande de


transaction scurise au serveur en envoyant
sa requte HTTPS://, il demande donc le
certificat garantissant la cl publique du
serveur.

Le protocole SSL

2 - le serveur lui envoie son certificat


d'authentification dlivr par une autorit de
certification (normalement organisme officiel).
Ce certificat comporte une cl publique.

Le protocole SSL

3 - Le navigateur s'assure tout d'abord que le


certificat dlivr est valide puis il envoie au
serveur une cl secrte code issue de la cl
publique (de 56 ou 128 bits).
Seul le serveur sera donc capable de dcoder
cette cl secrte car il dtient la cl prive.
Cette cl secrte ainsi cre sera utilise pour
encoder les messages (cryptographie
symtrique). L'algorithme cl secrte utilis
(ex : DES, RC4) est ngoci entre le serveur et
le client.

Le protocole SSL

4 - Le serveur et le client possde maintenant


une cl secrte partage (la cl de session) et
les changes sont faits par l'intermdiaire de
cette cl. Pour assurer l'intgrit des donnes,
on utilise un algorithme de hash (ex : MD5,
SHA). S'il y a dconnexion, une nouvelle cl
de session sera ngocie.

Le protocole SSL

Ce mcanisme permet d'assurer

laconfidentialit(mcanisme de chiffrement),

l'intgrit(algorithme de hash)

l'authentification(certificats).

L'authentification du client est aussi possible


avec le protocole SSL mme si seule
l'authentification du serveur est
implmentepar dfaut.
10

Le protocole SSL

Le chiffrement asymtrique ne sert finalement


qu' l'authentification et transmettre la cl
de session de manire scurise ; c'est
ensuite, cette cl de session (symtrique) qui
sert chiffrer les changes.

En effet, le chiffrement symtrique est


beaucoup plus rapide que le chiffrement
asymtrique.

11

Pourquoi SSL?

L'accs un serveur web utilise le protocole http via le


rseau Internet.

Il est tout fait possible un pirate d'intercepter vos


requtes (votre code de carte bleue) et les rponses
faites par le serveur car les informations circulent "en
clair" sur le rseau.

De plus, il n'est pas certain que vous soyez en cours de


consultation du site que vous croyez (aucun mcanisme
d'authentification des parties n'est mis en uvre au
niveau du protocoleHTTP).
12

Le protocole HTTPS

Le protocoleHTTPS(HTTPoverSSL) permet de
remdier ces deux inconvnients :

Les changes sont crypts (la requte resterait


illisible pour le pirate).

l'authentificationSSLdu serveur est mis en uvre :


on est assur que le serveur auquel on accde est
bien celui que l'on croit.

HTTPSoffre d'autres possibilits comme authentifier


la personne qui accde au serveur.
13

Mettre en place le protocoleSSLsur votre


serveur WEB.
Le serveur virtuel auquel l'on accde avec l'url
"http://wiki.domain1.org" ; c'est ce serveur
que l'on va scuriser.

14

Les paquets installer

Les paquetages suivants supplmentaires doivent


tre installs:

openssl ;

libssl0.9.8 ;

Et en option ssl-cert ;

OpenSSL fournit notamment une application pour


crer des certificats.

Le paquetage ssl-cert fournit une interface debconf


openssl pour crer les certificats.
15

Remarque : dans l'ancienne version d'apache2-common ,


il existait une commande (apache2-ssl-certificate)
permettant de crer des certificats pour Apache trs
rapidement et automatiquement ; cette commande
n'existe plus dans la nouvelle version apache2.2-common.

Il sera ensuite ncessaire d'activer le module ssl


d'apache2 qui implmente https.

Le serveur https coute par dfaut sur le port 443 au lieu


de 80 et correspond un virtual host configur par des
directives spcifiques.
16

Etape 1 : La cration des certificats

sous root, aller dans le rpertoire de


configuration de votre serveur Apache2
/etc/apache2 (on peut videmment choisir
un autre rpertoire) et crez un rpertoire
appel ssl.

Vous vous placerez dans ce rpertoire afin que


les cls et les certificats soient crs
l'intrieur avant d'effectuer les manipulations.

17

Cration du certificat serveur

Gnration de la cl prive

On gnre la clef prive avec la commande


suivante en dfinissant un nom de fichier :

Ce qui donne:

18

Cration du certificat serveur

Si vous souhaitez que cette cl ait un mot de


passe (qui vous sera demand chaque
dmarrage d'apache, ajoutez "-des3" aprs
"genrsa".
Ceci a pour effet de crer une cl SSL.
Vous pouvez observer son contenu : less
servwiki.key

19

Protgez votre fichier en faisant :

chmod 400 servwiki.key

A partir de votre cl, vous allez


maintenant crer un fichier de demande
de signature de certificat (CSR
Certificate Signing Request).

On gnre la demande de certificat avec la


commande suivante :

20

Le systme va vous demander de saisir des


champs ; remplissez-les en adaptant sauf le
champ "Common Name" qui doit tre
identique au nom d'hte de votre serveur
virtuel :

21

Ceci a pour effet de crer le formulaire de


demande de certificat (fichier servwiki.csr)
partir de notre cl prive pralablement
cre.
Ce fichier contient la cl publique
certifier.Un less servwiki.csr nous donne :

22

23

Cration du certificat de l'autorit de


certification

La cration de la cl prive de l'autorit de


certification se fait comme prcdemment :

Ce qui a pour effet de crer la cl prive de


l'autorit de certification.

24

Dans ce cas, il vaut mieux rajouter l'option -des3 qui


introduit l'usage d'une "passphrase" (mot de passe
long qui peut mme contenir du blanc) car c'est
cette cl prive qui signera tous les certificats que
l'on mettra ;

Cette "passphrase" sera donc demande chaque


utilisation de la cl.

Ensuite, partir de la clprive, on cre un certificat


x509 pour une dure de validit d'un an auto-sign :
25

Il faut saisir la passphrase... puisqu'on utilise


"ca.key" que l'on a protg. Et on donne les
renseignements concernant cette fois-ci
l'autorit de certification (c'est dire nousmme).
Attention : le nom de "Common Name" doit
tre diffrent de celui qui a t donn pour la
cl.

26

C'est notre certificat d'autorit de certification


qui va permettre de signer les certificats
crs.
La signature du certificat serveur par le
CA (Certificate Autority)
La commande qui signe la demande de
certificat est la suivante :

L'option CAcreateserial n'est ncessaire que la


premire fois.

27

Il faut saisir la passphrase...


Le certificat sign est le fichier "servwiki.crt".
La sortie de la commande attendue est la
suivante :

28

Vous avez maintenant un certificat pour votre


serveur se nommant servwiki.crt.

29

Il faut maintenantinstaller le certificat de l'autorit


de certification dans chaque navigateur client.

C'est ce dernier qui va valider le certificat reu par le


client lors de la requte https://.

Installation du certificat d'autorit de certification

Pour installer sur votre navigateur le certificat de l'autorit


de certification, fichier ca.crt:

"Arrangez-vous" pour avoir le certificat disponible partir


du client (disquette, cl usb, ftp, ssh, rpertoire partag...)

30

Sous Windows, un clic droit ou double-clic sur le


fichier devrait vous permettre de lancer l'assistant
d'installation du certificat dans Internet Explorer.

Vous devez l'installer en tant qu'autorit de


certification.

Vrifiez ensuite que le certificat s'y trouve bien


sous le nom de "cert_CA".

31

sur Mozilla :

Edition/prfrence/Confidentialit et
Scurit/Certificats

Bouton de commande : gestion des certificats

Onglet : autorit

Bouton de commande : importer

etc...

Il ne reste plus maintenant qu' configurer apache2.


32

Configuration Apache 2

33

configuration d'Apache2

Activation du module ssl


Il est ncessaire dans un premier temps
d'activer le module ssl :

Comme on vous le demande, relisez la


configuration du serveur.
La commande ls /etc/apache2/mods-enabled/
donne partiellement ceci :

34

Configuration du port

Ajoutez au fichier /etc/apache2/ports.conf la


ligne suivante:

35

Configuration du virtual host

Nous allons faire fonctionner sur notre serveur


simultanment des virtualhost fonctionnant
sousHTTP(sur le port 80) et des virtualhost
fonctionnant sousHTTPS(sur le port 443).

Ds lors que l'on a des serveurs virtuels qui


"tournent" sur des ports diffrents, il est
obligatoire de prciser pour chaque serveur
virtuel son port.

36

Configuration du virtual host

Aussi, dans le fichier/etc/apache2/siteavailable/default, il faut modifier :

37

Configuration du virtual host

Profitez-en pour effacer le virtualhost correspondant au ServerName


: wiki.domain1.org puisque c'est celui que l'on va configurer
enHTTPS.

Il est possible de rajouter la configuration du virtualhost devant


fonctionner sous ssl dans le fichier/etc/apache2/siteavailable/default, mais nous allons garder l'esprit modulaire et crer
un fichier de conf spcifique/etc/apache2/site-available/default-ssl.

Voici ce que vous devez trouvez au minimum dans le


fichier/etc/apache2/site-available/default-ssl(les commentaires
et/ou explications ventuelles prcdent les directives)

38

39

Activation du site

Il est ncessaire maintenant d'activer le site :


a2ensite default-ssl
Attention : ne pas oublier de relire ensuite la
configuration de mme qu' chaque
modification ultrieure du fichier.
Vous pouvez maintenant "passer" la phase
de test...
A partir d'un navigateur sur votre poste
client :

40

Finalement

Votre page devrait s'afficher normalement.

Si vous avez une alerte de scurit, c'est que vous avez mal ralis
une tape.

Selon l'alerte, reprenez l'tape correspondante.

Si a ne fonctionne pas vous pouvez mme mettre le LogLevel


"debug" ou "info" la place de "warn" puis dans une console : "tail
-f /var/log/apache2/error_ssl.log" pour voir quels sont les problmes
qui surviennent quand vous rechargez la lecture de la configuration.

Une autre commande peut vous aiguiller sur une ventuelle


erreur :openssl s_client -connect prof.btsinfo.fr:443

41

Mettre en place un serveur proxy (squid)

42

Serveur Proxy

Le serveurmandataire(proxy) est une machine souvent


physiquement situe entre un rseau et son accs Internet.

Il fait office la fois de passerelle pour l'accs Internet et de


cache de pages web.

Passerelle, parce que tous les accs Internet passent par le Proxy,

Cache, parce que le Proxy conserve en mmoire cache (sur disque),


une copie des pages consultes par les utilisateurs du rseau.

Cela vite de tlcharger nouveau la mme page sur le site


d'origine, si un utilisateur revient frquemment dessus.

43

Serveur Proxy

Si un hte du rseau demande l'adresse d'un nud


distant situ sur un autre rseau, et que cet hte
passe par un service proxy, le proxy va renvoyer
l'hte sa propre adresse Ethernet.

Une fois cette opration ralise, tous les paquets


envoys par l'hte seront destination de l'adresse
Ethernet du proxy.

Le proxy aura en charge de transmettre ces


paquets l'adresse effective du nud distant.
44

Configuration de squid

Pour les rponses, un processus identique est


mis en place.

Le site consult, ne retourne les rponses


qu'au serveur proxy.

Le serveur proxy se charge de ventiler les


pages au bon destinataire du rseau local.

45

Configuration de squid

Squid est un service serveur proxy-cache sous linux.

Les objets consults par les clients sur internet, sont


stocks en cache disque par le serveur.

A partir du deuxime accs, la lecture se fera en cache,


au lieu d'tre ralise sur le serveur d'origine.

De ce fait il permet d'acclrer vos connexions


l'internet en plaant en cache les documents les plus
consults.

On peut aussi utiliser la technique du service serveur


mandataire pour effectuer des contrles d'accs aux sites.
46

Configuration de squid

Les services proxy peuvent tre organiss de


faon hirarchique:

47

Configuration de squid

Les serveurs peuvent tre paramtrs pour les


autorisations d'accs et les synchronisations.

Les postes clients sont souvent configurs pour utiliser


un serveur proxy.

Le client s'adresse au serveur proxy, et c'est ce dernier


qui traite la requte sur internet.

Un fois la rponse reue, le serveur met en cache la


rponse et la retourne au client interne.

Le service proxy est frquemment configur sur un


routeur.
48

Configuration de squid

Dans certains cas, on peut ne pas souhaiter que la


configuration soit ralise au niveau du client.

On souhaite que celle-ci soit faite au niveau du serveur.

Cela peut arriver par exemple si vous avez plusieurs


centaines de postes configurer ou bien si vous ne
souhaitez pas que les utilisateurs puissent modifier ou avoir
accs cette partie de la configuration.

On parlera de service proxy transparent.

Le service serveur proxy peut tre sur le routeur d'accs


l'internet ou sur une autre machine.
49

Configuration de squid

50

Configuration de squid

Sur la Figure 1, le service proxy est install sur


le routeur.

Sur la figure 2, les requtes du client (1), sont


rediriges vers le proxy par le routeur (2), qui
retourne au client la rponse ou redirige vers
le routeur (3) pour un envoi sur l'extrieur.

51

Installer Squid

Sur les debian:

apt-getinstallsquid.

52

Configuration de squid

Pour dmarrer une configuration simple de squid, il est


possible d'utiliser le fichier de configuration
/etc/squid.conf, dont chaque paramtre est
document.

Toute la configuration de Squid se trouve dans le


fichiersquid.conf.

La plupart des options par dfaut du fichier ne sont


pas changer (vous pouvez alors laisser le # pour
conserver les options en commentaire.)
53

Configuration de squid

http_port: le port que vous souhaitez utiliser.


Le plus frquent est 8080.

Il faut donc changer cette valeur car par dfaut


Squid utilise 3128.

icp_port: conserver le port 3130. Ceci vous


permet de communiquer avec des proxycache parents ou voisins.

54

Configuration de squid

cache_mem: correspond au cache mmoire, la valeur


dpend de votre systme.

Par dfaut squid utilise 8 Mo.

Cette taille doit tre la plus grande possible afin d'amliorer les
performances (Considrez 1/3 de la mmoire que vous rservez
Squid).

Il faut avec cache_mem rgler cache_mem_low et


cache_mem_high qui sont les valeurs limites de remplissage du
cache mmoire.

Par dfaut les valeurs sont 75 % et 90 %.

Lorsque la valeur de 90 % est atteinte le cache mmoire se vide

55

jusqu' 75 %.

Configuration de squid

cache_swap: correspond la taille de votre


cache disque.

Si la taille du disque le permet, et en fonction de la


taille de votre tablissement (nombre de clients
qui utilisent le cache), mais aussi de la dure de
rafrachissement de votre cache et du dbit de
votre ligne, vous devez mettre la valeur qui vous
semble correspondre votre situation.

56

Configuration de squid

maximum_object_size: taille maximale de l'objet


qui sera sauvegard sur le disque. On peut
garder la valeur par dfaut.

cache_dir: Vous indiquez ici le volume de votre


cache. Si vous avez plusieurs disques, utilisez
plusieurs fois cette ligne.

Si squid ne fonctionne pas bien ou s'arrte parfois


sans raison apparente, vrifiez que vous avez un
cache assez important ou bien configur.

57

Configuration de squid

Les valeurs 16 et 256, indiquent le nombre de sous-rpertoires


crs respectivement dans le premier niveau et suivants pour
le stockage des donnes du cache.

cache_access_log;cache_log;cache_store_log: Indique
l'endroit o se trouve les logs (fichiers de journalisation).
Si vous ne souhaitez pas avoir de log (par exemple des
objetscache_store_log) indiquercache_store_lognone.

debug_options ALL,1: niveau de debug. Indiquer 9 pour


avoir toutes les traces la place de 1. Attention cela
donne de gros fichiers.
58

Configuration de squid

dns_children: par dfaut le nombre de processus


simultans dns est de 5. Il peut tre ncessaire
d'augmenter ce nombre afin que Squid ne se
trouve pas bloqu. Attention de ne pas trop
l'augmenter cela peut poser des problmes de
performance votre machine (indiquer 10 ou 15).

request_size: taille maximale des requtes.


Conserver la valeur par dfaut, concerne les
requtes de type GET, POST...
59

Configuration de squid

refresh_pattern: permet de configurer la


dure de mise jour du cache. Utiliser-ipour
ne pas tenir compte des minuscules ou des
majuscules.

Les valeurs Min et Max sont indiques en


minutes.

Exemple:

60

Configuration de squid

visible_hostname: indiquer ici le nom de votre


serveur proxy.
logfile_rotate: pour faire tourner vos logs et
garder un nombre de copies. par dfaut 10.
attention si votre cache est trs utilis , il peut
gnrer un grand volume de logs, pensez
donc rduire ce nombre.
error_directory: Pour avoir les messages
d'erreurs en franais (indiquer le rpertoire o
ils se trouvent). Exemple:

61

Configuration de squid

Initialisation de Squid
Cela n'est ralis que la premire fois afin de
gnrer le cache.
squid -z

62

Les options de dmarrage de Squid

On peut dmarrer Squid en lui passant des


commandes sur la ligne de commande.

Diffrents paramtres peuvent tre passs sur


la ligne de commande.

Les options passes de cette faon


remplacent les paramtres du fichier de
configuration de Squidsquid.conf.

63

Les options de dmarrage de Squid

64

Contrler les accs du squid

Pour contrler tout ce qui passe par votre serveur


proxy, vous pouvez utiliser ce que l'on appelle
lesACL(Access Control List).

LesACLsont des rgles que le serveur applique.

Cela permet par exemple d'autoriser ou d'interdire


certaines transactions.

On peut autoriser ou interdire en fonction du domaine,


du protocole, de l'adresseIP, du numro de port, d'un
mot, on peut aussi limiter sur des plages horaires.
65

Contrler les accs du squid

La syntaxe d'uneACLest la suivante:

66

Contrler les accs du squid

acltypepeut prendre comme valeur:

67

Contrler les accs du squid

Exemple 1: Interdire l'accs un domaine:


supposons que nous souhaitions interdire
l'accs un domaine (par exemple le domaine
pas_beau.fr).

On a donc

La dernire ligne ne doit exister qu'une fois


dans le fichiersquid.conf.

68

Contrler les accs du squid

Exemple 2: interdire l'accs aux pages contenant le


mot jeu.

Attentionurl_regexest sensible aux majuscules et


minuscules.

Pour interdireJEU, il faut aussi ajouterJEUdans


votreACL.
69

Contrler les accs du squid

Il n'est pas besoin de rcrire toute l'ACL.

On peut ajouterJEUderrire jeu en laissant un


blanc comme sparation (cela correspond
l'oprateur logique OU).

70

Contrler les accs du squid

On peut placer un nom de fichier la place


d'une srie de mots ou d'adresses, pour cela
donner le nom de fichier entre guillemets.

Chaque ligne de ce fichier doit contenir une

entre.
Exemple 3: utilisation d'un fichier

71

Contrler les accs du squid

Des produits associs Squid (redirecteurs)


permettent un contrle plus simple.

SquidGuard, par exemple, permet d'interdire


des milliers de sites.

Pensez, si vous utilisez SquidGuard,


configurer la ligne suivante dans le
fichiersquid.conf:

72

Contrler les accs du squid

Exemple 4: pour contrler qui a le droit


d'utiliser votre cache, crez uneACLdu type:

73

Contrler les accs par authentification

Parmi les demandes qui reviennent le plus


souvent, la question de l'utilisation de Squid
pour contrler qui a le droit d'aller sur
internet, est l'une des plus frquentes.

On peut imaginer deux solutions:


Les solutions

74

contrler les
accs par
salle et par
horaires

contrler en
fonction des
individus.

Contrler les accs par authentification

La premire consiste contrler les accs par salle et


par horaires, en fonction d'un plan d'adressage de
votre tablissement.

On l'administre avec une interface Web. Ce n'est alors


pas Squid qui est utilis pour cela mais les fonctions
de filtrage du routeur (netfilter par exemple).

Construire desACLdirectement dans Squid est


faisable, mais cela n'est pas toujours simple mettre
en uvre.
75

Contrler les accs par authentification

La deuxime solution est de contrler en


fonction des individus.
Squid permet de faire cela, partir de
plusieurs faons (APM,LDAP,NCSAauth,...).
Si vous utilisez un annuaireLDAP, vous devez
avoir dans le fichiersquid.confles lignes
suivantes:

76

Contrler les accs par authentification

Si vous n'avez pas de serveurLDAP, une


mthode simple mettre en uvre, consiste
utiliser une mthode similaire au
fichier.htaccessd'Apache.
Exemple de configuration avec NCSA_auth

77

La journalisation

Squid journalise les transactions dans un


fichieraccess.log.

Ce fichier donne les informations sur les


requtes qui ont transit par Squid.

Le fichiercache.loginforme sur l'tat du


serveur lors de son dmarrage.

Le fichierstore.loginforme sur les objets


stocks dans le cache.

78

La journalisation

Les dates indiques dans le


fichieraccess.logindique le temps en
secondes depuis le 1 janvier 1970 (format
epoch), ce qui n'est pas trs facile lire.

Un petit script en perl, permet de recoder les


dates:

79

Forcer le passage par Squid (Proxy


transparent)

Il existe plusieurs solutions:

Configurer votre navigateur avec le bon proxy


ou en utilisant le fichier de configuration
automatique et le rendre impossible changer.

Mais cela ncessite que vous contrliez les


clients ce qui n'est pas toujours le cas.

Intercepter les requtes sur le port 80 du


routeur pour les rediriger sur Squid.

80

Forcer le passage par Squid (Proxy


transparent)

Vous devez alors avoir dans votre


fichiersquid.conf:

81

Forcer le passage par Squid (Proxy


transparent)

Puis ajouter la rgle pour netfilter de


redirection des requtes sur le port 80

82