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.