Le but de ce TP est d'installer et de configurer un serveur Apache.
Rapport à rendre au secrétariat pour le vendredi 5 novembre 2004.
Commencez par effacer le contenu du répertoire /home/httpd pour supprimer les
éventuelles installations antérieures.
Récupérez les sources du serveur HTTP sous
http://www-igm.univ-mlv.fr/~roussel/DOWNLOAD/ et les décompresser :
tar jxf httpd-2.0.52.tar.bz2
Comme les machines de tp sont très lentes, l'archive contient déjà tous les fichiers compilés. Il vous reste donc uniquement à vous placer dans le répertoire décompréssé et à installer le serveur sous /home/http en tapant make install.
Placez vous dans le répertoire d'installation et démarrez le serveur en tapant :
./bin/apachectl startVérifiez avec votre navigateur préféré que votre serveur est lancé en accédant à l'adresse http://localhost:8080/index.html.
Afficher les différentes options de la commande apachectl en la lançant sans arguments. Faites en sorte que le serveur soit démarré et arrété automatiquement au démarrage et à l'arrêt de la machine.
La configuration du serveur se trouve dans le fichier conf/httpd.conf de votre installation. Retrouvez la directive qui précise la racine de l'arborescence de fichiers qui est exposée et celle qui précise le port d'attachement du serveur.
Testez les requêtes HEAD et TRACE. Pour TRACE vous pourrez également passer pas le proxy de l'université proxyweb.univ-mlv.fr:3128 et envoyez la requête suivante:
TRACE http://www.univ-mlv.fr HTTP/1.1 Host: test Connection: close
Testez au moyen de la commande netcat si votre serveur supporte les connexions
persistantes et le pipeline de requêtes. Modifiez le fichier de configuration du serveur
afin que celui-ci ferme les connexions après chaque requête. Testez cette nouvelle
configuration.
Vérifiez que la version 1.0 de HTTP ne supporte pas par défaut les connexions
persistantes. Testez l'en-tête Connection: keep-alive
Modifiez l'arborescence des fichiers exposés par le serveur pour que la racine pointe
sur le manuel (répertoire manual).
Ajoutez sous cette nouvelle racine une page index.html.fr ayant :
Pour que votre page soit préférée plutôt que celle par défaut, le serveur utilise un
gestionnaire de négociation type-map. Retrouvez dans le fichier de
configuration la directive qui met en place ce gestionnaire pour le manuel. L'association
se fait ensuite via un fichier d'associations qui dans la configuration par défaut
est le fichier sans extension de langue (index.html) ou le fichier avec
l'extension .var (index.html.var). Retrouvez dans le fichier de
configuration la directive qui précise cette extension.
Modifier la configuration de votre navigateur et le fichier d'association
index.html pour que votre page soit choisie plutôt que celle par défaut.
Suivez avec ethereal le flux TCP pour voir comment se fait la négociation.
Retrouvez dans le fichier configuration par défaut l'exemple de redirection. Le
décommenter et le modifier pour que l'URL http://localhost:8080/i2000 pointe
sur le serveur d'ingénieurs 2000 http://www.ingenieurs2000.com/.
Suivez avec ethereal le flux TCP pour voir comment se fait la redirection
Ajoutez une directive VirtualHost afin que les pages retournées lorsque l'on accède à votre serveur avec l'URL http://localhost:8080/ soient différentes de celles qui sont retournées lorsque l'on utilise le nom de la machine (pensez à enlever la configuration du proxy).
Pour pouvoir répondre en parallèle à plusieurs requêtes HTTP le serveur utilise par défaut plusieurs processus. Repérez au moyen de la commande ps -C httpd le nombre de processus qui, par défaut, sont en attente de connexion. En fait, ces processus sont gérés par une piscine (pool) de processus qui fait varier le nombre de processus en fonction des demandes. Retrouvez dans le fichier de configuration les directives correspondant à la piscine de processus et modifiez le nombre de processus disponibles au démarrage du serveur.
Dans le fichier de configuration, retirez les commentaires des directives server-status et ExtendedStatus, relatives au module mod_status (apachectl -l pour voir la liste des modules) qui permet d'avoir accès à l'état du serveur. Modifiez les directives de restriction d'accès pour que seuls les clients sur la machine locale aient accès à cette page.
On souhaite maintenant restreindre l'accès à la page à un groupe particulier d'utilisateurs. Pour cela, précisez :
Pour créer le fichier de mot de passe, il faut utiliser la commande htpasswd livrée avec Apache httpd. Par exemple, la commande suivante crée un nouveau fichier avec l'utilisateur user1 et user2 :
htpasswd -c file user1 htpasswd file user2Le fichier des groupes contient sur chaque ligne un nom de groupe suivi d'un deux-points (:) suivi d'une listes d'utilisateurs séparés par des espaces.
Au moyen de l'analyseur de flux TCP ethereal, suivre la suite de requêtes/réponses entre le client et le serveur (filtre tcp.port eq 8080). Retrouvez la portion qui contient le mot de passe. Récupérez sous http://igm.univ-mlv.fr/~roussel/DOWNLOAD/ les sources du programme base64 et compilez le (./configure, make et make intall). Utilisez le pour décoder le nom de l'utilisateur et le mot de passe trouvé dans l'en-tête.
On souhaite maintenant installer une connexion sécurisée vers le serveur via SSL. Pour cela, il faut commencer par créer les clefs et le certificat pour le serveur. Nous allons commencer par nous contenter d'un certificat auto-certifié. Pour cela lancez :
Modifiez maintenant le fichier de configuration ssl.conf pour :
Testez la connexion à votre serveur avec la commande suivante :
openssl s_client -connect localhost:3443 -state
openssl s_client -connect localhost:3443 -cipher NULL-SHA:NULL-MD5 -quiet
Modifiez la configuration du serveur pour forcer le non chiffrement comme suit :
SSLCipherSuite NULL-SHA:NULL-MD5Vérifiez que votre configuration avec openssl et que votre client n'autorisent pas de telles connexions.
On souhaite maintenant jouer le rôle d'autorité de certification. Pour cela créer les clefs et un certificat, comme vous l'avez fait pour le serveur, pour une nouvelle entité que vous nommerez CA (fichiers ca.key, ca.crt). Pour que cette autorité de certification signe le certificat de votre serveur, créez une Certification Signing Request comme suit :
openssl req -new -key server.key -out server.csrRécupérez ensuite le script sign.sh fournit par le mod_ssl sous http://igm.univ-mlv.fr/~roussel/DOWNLOAD/ pour signer cette CSR.
./sign.sh server.csrVous obtenez alors un nouveau certificat que vous devez fournir à votre serveur.
Ajoutez maintenant dans votre navigateur le certificat pour l'autorité de certification que vous venez de créer et testez à nouveau l'accès à l'arborescence sécurisée.