Apache2
— Serveur Web —
Certificats SSL Web | .htaccess | Authentification par carte à puce | Certificats Let's Encrypt
Archives : Ancien article sur Apache2 | Module Whois | ProFTPd
Module proxy
Cas d'usage
Utilisation du module proxy http pour rediriger des requêtes - de manière transparente - sur des ports différents du port standard 80.
Par exemple, nous disposons d'une adresse IP publique derrière laquelle le port HTTP 80 est redirigé sur notre serveur web 192.168.0.10. Nous avons un second serveur web qui a pour adresse 192.168.0.20 et dont nous souhaitons y accéder également par Internet depuis le port tcp HTTP 80.
Fonctionnement sans Proxy
Dans un cas sans proxy, pour avoir accès au second serveur web on doit ouvrir un port tcp sur le routeur puis le rediriger sur notre second serveur web. Par exemple, on ouvre le port TCP 8080 qui, avec une règle PAT, pointera sur le port TCP 80 du serveur web 192.168.0.20. Ainsi, depuis l'adresse http://<mon_ip_publique>:8080/ on atteindra le second serveur web.
L'inconvénient de cette méthode est le faite qu'il faut renseigner le port d'écoute du serveur web directement dans l'url. |
Fonctionnement avec Proxy
Dans une configuration avec proxy on définit sur notre serveur web principal un hôte virtuel. Par exemple, monsite2.fr. On fait pointer cet hôte virtuel sur le serveur d'hébergement 192.168.0.20 au lieu de le faire pointer sur un dossier à la racine du serveur web hôte. On fait pointer le domaine monsite2.fr (ou un sous domaine) sur l'adresse IP publique du serveur web 192.168.0.10. Ainsi, depuis l'adresse http://monsite2.fr/ on atteindra le second serveur web.
Le serveur web primaire se charge de rediriger la requête vers le second serveur web. Pour l'internaute, ceci est totalement transparent. En revanche, en cas de panne du serveur web principal, le second serveur n'est plus accessible depuis Internet. |
Activation du mode Proxy
- Depuis le serveur web principal, on active les modules proxy et proxy_http.
|
|
- On redémarre le serveur web pour appliquer les changements.
|
|
Configuration du Vhost
Nous allons créer l'hôte virtuel monsite2.fr sur le serveur web primaire. Ce dernier pointera sur notre second serveur web. Pour cela, on va créer le fichier /etc/apache2/sites-enable/monsite2.fr.conf avec les informations suivantes :
<VirtualHost *:80> ServerAdmin postmaster@domaine.tld ServerName monsite2.fr ProxyPass / http://192.168.0.20:80/ ProxyPassReverse / http://192.168.0.20:8000/ ProxyPreserveHost On </VirtualHost>
- Si le serveur sur lequel est renvoyé la requête attend une connexion chiffrée via le protocole https, une erreur de type 500 apparaîtra. Il faut procéder à l'activation du moteur SSL pour le proxy http via SSLProxyEngine.
- Pour cela, il faut ajouter dans la configuration du fichier /etc/apache2/sites-enable/monsite2.fr.conf l'élément suivant (avant la balise de fermeture </VirtualHost>) :
SSLProxyEngine On
- Si vous utilisez un certificat auto-signé, l'erreur suivante apparaîtra lorsque vous tenterez d'accéder au site :
Reason: Error during SSL Handshake with remote server http_proxy
- Il sera donc nécessaire de désactiver les contrôles de certificat opéré par le serveur web principal. Pour cela, après la ligne ProxyPreserveHost On il faut ajouter les éléments suivants :
SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off
- Rechargez la configuration du serveur Apache2 pour prendre en compte les modifications.
|
|
Module ssl
Un certificat SSL permet de crypter les échanges entre le client et le serveur. Ce type de certificat est utilisé par le protocole http sécurisé (https) pour sécurisé les échanges dans le cadre d'échange de données sensibles (paiement en ligne, banque en ligne, sites gouvernementaux).
Les certificat SSL sont délivrés par une autorité dédiée et reconnu de tous. Cela est visible dans le navigateur web où le cas échéant, un message d'avertissement apparaît. Il est possible de générer ses propres certificats sans faire appel aux services d'une autorité. Dans ce cas, on dira que le certificat est auto-signé.
Certificat auto-signé
- Le certificat est généré par l'utilisateur. Pour pouvoir générer ses propres certificats, il faut installer le paquet openssl.
|
|
- Génération de la clé ssl. La clé peut avoir les longueurs de 512, 1024 ou 2048. Cependant, on préférera une longueur de 2048 qui est la plus complexe et donc la plus difficile à corrompre. L'algorithme de cryptage utilisé pour créer notre clé est le RSA (algorithme de cryptage asymétrique).
|
|
|
Le dossier /etc/ssl/private est présent pour contenir vos clés et certificats privés. |
- Ensuite, il s'agit de créer le certificat qui sera récupéré par le navigateur web avec toutes les données relatives à l'autorité fournissant le certificat ainsi que la clé de partage :
|
|
- Enfin, on signe le certificat précédemment crée pour une durée de validité de 1 an (365 jours) :
|
|
Certificat fournie par une autorité
L'autorité fournit la clé privée qui a été cryptée par le mot de passe que vous avez saisie au préalable. Pour éviter que le serveur web ne demande à chaque redémarrage le mot de passe pour pouvoir lire la clé, on va la déchiffrer et la stocker sur le serveur.
- Récupérez la clé depuis le site de l'autorité et sauvegardez là dans le fichier /etc/ssl/mon-site.fr.key.
- Nous procédons au décryptage de la clé.
|
|
- Il faut également récupérer le certificat qui a été généré par l'autorité et le sauvegarder dans le fichier /etc/ssl/mon-site.fr.crt.
Maintenant on peut configurer l'hôte virtuel Apache pour utiliser notre certificat et sa clé privée.
Utilisation dans Apache2
Le protocole https écoute sur le port 443. Il faudra donc modifier la configuration d'Apache2 pour répondre aux conditions suivantes :
- Écouter sur le port 443.
- Permettre des hôtes virtuels sur le port 443.
Configuration de /etc/apache2/ports.conf
- Nous allons y ajouter les éléments suivants (activation du module pour les hôtes virtuels et écoute sur le port 443) :
NameVirtualHost *:443 Listen *:443
- Et, à la fin, si ce dernier n'existe déjà pas :
<IfModule mod_gnutls.c> Listen 443 </IfModule>
- On redémarre Apache2 pour prendre en compte ces modifications :
|
|
Création du site web SSL
Dans notre exemple, nous créons le site www.mon-site.fr accessible via https://.
- Création du fichier /etc/apache2/sites-available/mon-site.fr.conf.
|
|
- On édite le fichier et on y renseigne les lignes suivantes :
<VirtualHost *:443> DocumentRoot /var/www/mon-site.fr/www/ ServerName www.mon-site.fr <Directory /var/www/mon-site.fr/www/> allow from all Options +Indexes </Directory> SSLEngine on SSLCertificateFile /etc/ssl/private/mon-site.fr.crt SSLCertificateKeyFile /etc/ssl/private/mon-site.fr.key </VirtualHost>
- On redémarre Apache2 pour prendre en compte ces modifications :
|
|