====== Configurer SSL ====== __OS__: Debian Sarge __But__: Configurer Apache2 de manière à pouvoir effectuer des requêtes sécurisées (https) __Solution__: La mise en place de SSL sur Apache2 implique: * un clé privée * un certificat généré à partir de la clé privée * le module SSL pour apache2 * configurer apache2 pour que le serveur: * trouve la clé * trouve le certificat * écoute sur le port SSL (=443) * contienne un virtual host correspondant au port 443 __Création de la clé privée__: openssl genrsa -des3 -out alaxos.com.key 1024 __Création du certificat__: openssl req -new -key alaxos.com.key -x509 -out sslname.crt Ou encore umask 077 && touch alaxos.key alaxos.cert alaxos.info alaxos.pem openssl genrsa 2048 > alaxos.key openssl req -new -x509 -nodes -sha1 -days 3650 -key alaxos.key > alaxos.cert openssl x509 -noout -fingerprint -text < alaxos.cert > alaxos.info cat alaxos.cert alaxos.key > alaxos.pem chmod 400 alaxos.key alaxos.pem La clé et le certificat doivent en théorie être placés dans /etc/apache2/ssl Les droits de lecture de la clé privée doivent être réservés à root pour plus de sécurité. Sous Apache2, le module SSL est présent dans /etc/apache2/mods-available Ce dossier contient les modes que l'on peut activer pour Apache2. Pour les activer, il suffit de créer un lien dans le dossier /etc/apache2/mods-enabled vers les fichiers .conf et .load du module. Dans notre cas, ssl.conf et ssl.load. ln -s /etc/apache2/mods-available/ssl.conf ssl.conf ln -s /etc/apache2/mods-available/ssl.load ssl.load Pour que Apache2 trouve la clé privée et le certificat, il suffit de rajouter les paths vers ceux-ci dans /etc/apache2/mods-available/ssl.conf en fin de fichier: ... SSLCertificateFile /etc/apache2/ssl/sslname.crt SSLCertificateKeyFile /etc/apache2/ssl/alaxos.com.key Note: L'outil apache2-ssl-certificate génèe automatiquement un certificat et une clé pour Apache2. Le fichier créé est de type file.pem. En fait, ce fichier contient la clé et le certificat. Dans ce cas, un seul lien vers celui-ci est évidemment suffisant. Pour que Apache2 écoute sur le port 443, il suffit de modifier le fichier /etc/apache2/ports.conf en ajoutant Listen 443 Pour créer un virtual host correspondant au port 443, il faut modifier le fichier /etc/apache2/sites-available/default, en rajoutant: NameVirtualHost *:443 ServerAdmin email@email.com SSLEngine on DocumentRoot /var/www/ Options FollowSymLinks AllowOverride None Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all # This directive allows us to have apache2's default start page # in /apache2-default/, but still have / go to the right place # RedirectMatch ^/$ /apache2-default/ ====== Permettre à certaines IP de browser un dossier ====== __OS__: Debian Sarge __Soft__: Apache2 __But__: Permettre à quelques adresses IP de naviguer dans les dossiers d'un répertoire. __Solution__: //Remarque:// //De manière générale, il est préférable de configurer Apache en évitant les .htaccess si on a les droits pour modifier les fichiers principaux. L'utilisation des .htaccess est gourmande, puisque le serveur regarde à chaque niveau d'une arborescence si le fichier existe, puis le(s) traite. Il en résulte une perte de performance.// //De plus, l'administration est plus simple si elle est centralisée.// Sous Apache2, les droits particuliers sur un dossier sont donnés dans les fichiers présents sous /etc/apache2/sites-available Voici un exemple de configuration pour un dossier (dans le fichier default: Alias /test "/home/rodn/documents/test/" Options Indexes IndexOptions NameWidth=* AllowOverride None Order deny,allow Deny from all #Local Allow from 127.0.0.1 Allow from xxx.xxx.xx.xxx #une autre IP Allow from xxx.xxx.xx.xxx * Alias /test "/home/rodn/documents/test/" indique que l'URL /test pointe vers le dossier /home/rodn/documents/test/ * Options Indexes lance le module mod_autoindex utilisé pour construire les pages html * IndexOptions NameWidth=* indique de montrer les noms de fichiers en entier * AllowOverride None bloque l'utilisation des .htaccess dans le dossier ====== Forcer SSL sur certaines URLs ====== __OS__: Ubuntu 9.10 __Soft__: Apache2.2 __But__: Forcer SSL lorsque l'on accède à une certaine URL __Solution__: Alias /phpmyadmin /usr/share/phpmyadmin RewriteEngine On RewriteCond %{SERVER_PORT} !443 #pour tout port différent de 443 RewriteRule (.*) https://www.alaxos.ch%{REQUEST_URI} [R,L] #redirige avec le hostname en dur -> redirige aussi 'localhost' vers le hostname ====== Ajouter un user à un fichier de "digest authentication" ====== __OS__: Ubuntu 9.10 __Soft__: Apache2.2 __But__: Ajouter un utilisateur à un fichier contenant les users pour une "digest authentication". La particularité de ce fichier est qu'il contient - en plus du login et du hash du mot de passe - un realm correspondant à la directive AuthName dans le fichier de config d'Apache. __Commande__: htdigest ./user_file "The AuthName value" username ====== Créer un alias sur un dossier au moyen de mod_rewrite ====== __Soft__: Apache2.2 __But__: Le but était ici de renommer un dossier, tout en préservant des liens vers des images présentes dans ce dossier. Exemple: renommer le dossier //old_name// en //new_name// __Solution__: - Renommer le dossier //old_name// en //new_name// - Recréer un dossier //old_name// - Dans le nouveau dossier //old_name//, créer un fichier //.htaccess// contenant la config suivante: RewriteEngine on RewriteRule (.*) /new_name/$1 [L] ====== Bloquer l'accès sauf depuis quelques IP ====== __Soft__: Apache2.2 __But__: Ne permettre l'accès à un dossier ou autre que depuis certaines adresses IP en particulier __Solution__: RewriteEngine on RewriteCond %{REMOTE_ADDR} !^987\.654\.32\.10$ RewriteCond %{REMOTE_ADDR} !^123\.456\.78\.90$ RewriteRule ^$ soon_online.html [L]